2017-02-25 33 views
5

我的Mac应用程序旨在编辑和分析图形,用户可以在文件系统的任何位置创建和存储文件。我去用户让他们打开一个以前创建的文件与[NSOpenPanel openPanel]和一个内联完成处理程序块。在菜单处理我得到这个控制台错误信息几次:“在[NSOpenPanel openPanel]调用上无法更新[sic]书签项目”

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 { 
    ; 
} 

我没有做使用书签事情从程序中也没有,对于这个问题,有空投。

Xcode 8.2.1,Macbook MacOS 10.12.3。

+0

我在使用Qt的应用程序中看到了这一点,当我升级到Sierra和Qt 5.8时。我曾以为这是一个Qt问题,但显然不是。我并没有声称这是一个解决方案,但由于它似乎在寻找名为AirDrop的顶级目录,我尝试了创建一个。这至少摆脱了警告,并尝试这可能是一个有用的实验。我一直无法找到为什么文件打开对话框可能要查看/ AirDrop的任何解释,所以我真正在这里做的是分享一些经验。 – KeithS

回答

1

对于我来说,“无法更新书签项(空)”在发布时已登录我的应用程序的文件>打开最近菜单中包含的文件,我已经打开,再后来在Finder中删除的项目。我不知道是否有办法让菜单删除项目,但在运行我的应用程序时,通过选择文件>打开最近>清除菜单来删除消息。

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