我目前正在使用佳能 EDSDK 开发一个应用程序来访问我的 DSLR,它将直接打印拍摄的图像。这里的问题是,在我的应用程序显示 NSPrintPanel 或 NSPrintOperation 之前,我与 EDSDK 接口的代码可以完美运行。如果使用“runModalX”或“beginSheetWith”函数显示其中之一,然后再次退出(取消或确定似乎没有区别),那么 EDSDK 中的回调似乎停止工作。我仍然可以与相机交互,下载实时取景图像,拍摄图像,但依赖回调的动作不再有效。一个示例代码,我如何称呼我的 NSPrintPanel 在这里:
NSPrintInfo * printInfo = [NSPrintInfo sharedPrintInfo];
NSPrintPanel * printPanel = [NSPrintPanel printPanel];
NSInteger result = [printPanel runModalWithPrintInfo: printInfo];
这就是我调用 NSPrintOperation 的方式:
//view is a NSView with some data added, info is obtained as above
NSPrintOperation * printOp = [NSPrintOperation printOperationWithView: view printInfo: printInfo];
[printOp setShowsPrintPanel: NO];
[printOp runOperation];
我的想法是,以某种方式显示此面板会与当前应用程序中发送的消息混淆。Xcode 生成的 Cocoa 应用程序模板已经通过“File->Print”菜单为我的应用程序提供了打印功能。如果打印窗口以这种方式显示,它会导致相同的错误,只有当我的应用程序运行时我在我的应用程序外部(例如来自 Safari)显示打印对话框时,它才不会弄乱 EDSDK。
有没有人知道这里的问题可能是什么,甚至如何解决它?
附带说明:如果我使用佳能示例应用程序“相机控制”并添加上述代码,最终会遇到同样的问题:实时取景仍然有效,与相机的任何交互都有效,但不调用回调(因此发送“拍照”命令甚至可以使用快门,但由于相机正在等待计算机下载拍摄的图像,因此之后没有快门释放)。