“无法在[NSOpenPanel openPanel]调用上更新项目的[sic]书签”

时间:2017-02-25 17:39:27

标签: objective-c macos sandbox bookmarks nsopenpanel

我的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。

1 个答案:

答案 0 :(得分:1)

对我来说,当我的应用程序的文件>时,在启动时记录了“无法更新项目(null)的书签”打开最近的菜单包含我打开的文件的项目,然后在Finder中删除。我不知道是否有办法让菜单只删除项目,但我通过选择文件>摆脱了消息;打开最近的>运行我的应用程序时清除菜单。

我的应用不使用NSDocument。我正在使用-noteNewRecentDocumentURL将项目添加到Open Recent。