我的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将项目添加到“最近打开”。

10-08 06:27