У меня есть приложение с главным окном и дополнительным окном с NSScannerDeviceView в нем. Идея состоит в том, чтобы отсканировать изображение в память и поместить его в NSImageView в главном окне.IKScannerDeviceView работает только один раз
Пока все хорошо. Когда окно сканера открывается, я могу сканировать изображение, и оно помещено правильно в NSImageView.
Проблема в том, что я могу сканировать снова и снова, но если я закрою окно сканирования и снова открою его, NSScannerDeviceView больше не работает. Я уверен, что решение относительно просто, но поскольку я все еще участвую в obj-c/какао, это меня забило.
код я использую следующим образом: ScanWindowController.h
#import <Cocoa/Cocoa.h>
#import <Quartz/Quartz.h>
#import <ImageCaptureCore/ImageCaptureCore.h>
@interface ScanWindowController : NSWindowController <IKScannerDeviceViewDelegate, ICScannerDeviceDelegate, ICDeviceBrowserDelegate> {
ICDeviceBrowser *mDeviceBrowser;
}
@property (strong) IBOutlet IKScannerDeviceView *ScannerView;
@end
и: ScannerWindowController.m
#import "ScanWindowController.h"
#import "AppDelegate.h"
@interface ScanWindowController()
@end
@implementation ScanWindowController
@synthesize ScannerView;
- (id)init
{
if (! (self = [super initWithWindowNibName: @"ScanWindowController"])) {
return nil;
}
mDeviceBrowser = [[ICDeviceBrowser alloc] init];
mDeviceBrowser.delegate = self;
mDeviceBrowser.browsedDeviceTypeMask = ICDeviceLocationTypeMaskLocal|ICDeviceLocationTypeMaskRemote|ICDeviceTypeMaskScanner;
[mDeviceBrowser start];
return self;
}
- (void)windowDidLoad
{
[super windowDidLoad];
}
- (void)windowWillClose:(NSNotification *)notification {
[mDeviceBrowser stop];
}
- (void)scannerDeviceView:(IKScannerDeviceView *)scannerDeviceView didScanToURL:(NSURL *)url fileData:(NSData *)data error:(NSError *)error
{
if(!error) {
[(AppDelegate*)[[NSApplication sharedApplication] delegate] recieveScannedData:data];
}
}
- (void)scannerDeviceDidBecomeAvailable:(ICScannerDevice*)scanner;
{
[scanner requestOpenSession];
}
- (void)deviceBrowser:(ICDeviceBrowser*)browser didAddDevice:(ICDevice*)addedDevice moreComing:(BOOL)moreComing
{
if ((addedDevice.type & ICDeviceTypeMaskScanner) == ICDeviceTypeScanner)
{
[ScannerView setScannerDevice:(ICScannerDevice*)addedDevice];
}
}
-(void)deviceBrowser:(ICDeviceBrowser *)browser didRemoveDevice:(ICDevice *)device moreGoing:(BOOL)moreGoing
{
[device requestCloseSession];
}
-(void)didRemoveDevice:(ICDevice*)removedDevice
{
[removedDevice requestCloseSession];
}
@end
Когда вы говорите «больше не работает» что вы имеете в виду? Завершает ли это время загрузки интерфейса или показывает, что было раньше, но не работает вход? Вы пытались найти трассировку стека сразу после возникновения проблемы? –
это вид сканера, как только он открывается, но все серое и неактивное. – dmid
- устройство, когда-либо «закрытое»? – tofutim