我目前正在使用佳能EDSDK开发一个应用程序来访问我的DSLR,它将直接打印拍摄的图像。这里的问题是,我的代码与EDSDK接口完美无缺,直到我的应用程序显示NSPrintPanel或NSPrintOperation。 如果使用“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。
有没有人知道,这里的问题是什么,甚至如何解决?
侧面注意:如果我使用Canons示例应用程序“Camera Control”并添加上面的代码,它最终会遇到同样的问题:实时视图仍然有效,与相机的任何交互都有效,但不会调用回调(因此发送“拍照”命令甚至可以使用快门,但由于相机正在等待计算机下载拍摄的图像,因此在此之后没有快门释放)。