我的Mac应用程序旨在编辑和分析图形,用户可以创建图形并将其存储在文件系统上任何位置的文件中。我去找用户,让他们用[NSOpenPanel openPanel]
和一个内联完成处理程序块打开一个先前创建的文件。在菜单处理过程中,我多次收到此控制台错误消息:
2017-02-25 13:42:47.394433 pasteurnet3[32901:1263849] [default] Failed to updated bookmark for item (null) [60AF512E-6072-427D-8624-C406B0EF7D5A] - URL:file:///AirDrop with error Error Domain=NSCocoaErrorDomain Code=260 "The file couldn’t be opened because it doesn’t exist."
这仅在创建
NSOpenPanel
时发生,甚至在发送beginWithCompletionHandler:
消息之前也是如此。 FWIW菜单仍然会在最终请求时出现,允许选择文件,否则似乎可以使用。菜单对象的初始化似乎确实存在很长的延迟。我已经很长时间没有对此应用程序进行关注了,但是消息的出现显然是由于MacOS的变化。我立即怀疑沙箱,但是该应用的沙箱功能已关闭。如果我打开沙箱并请求“用户选择的文件”权利,那似乎没有什么区别。
除了在
@try
块内完成之外,对象创建没有什么特别的:@try {
// Create the File Open Dialog class.
openDialog_ = [NSOpenPanel openPanel]; // error occurs here
}
@catch (NSException *e){
NSLog(@"innocuous exception(1) in -initForOpenWithDefaultFile:callBackTo:");
}
@catch (NSString *s){
NSLog(@"innocuous exception(2) in -initForOpenWithDefaultFile:callBackTo: \"%@\"", s);
}
@catch (...) {
NSLog(@"innocuous exception(3) in -initForOpenWithDefaultFile:callBackTo: probably a layout error");
}
@finally {
;
}
对于程序中的书签,我也不做任何事情,对于AirDrop,我也不做任何事。
Xcode 8.2.1,Macbook MacOS 10.12.3。
最佳答案
对我而言,启动时,当我的应用程序的"file">“打开”“最近”菜单中包含我已打开的文件的项,然后在Finder中删除时,记录了“未能更新项的书签(空)”。我不知道是否有办法使菜单仅删除项目,但通过运行应用程序时选择"file">“打开最近的文件”>“清除菜单”,我摆脱了消息。
我的应用程序不使用NSDocument。我正在使用-noteNewRecentDocumentURL将项目添加到“最近打开”。