调用`[[NSDocumentController sharedDocumentController] recentDocumentURLs]`挂起

时间:2015-10-17 17:50:55

标签: objective-c cocoa nsdocumentcontroller

我有一个应用程序,通常会调用[[NSDocumentController sharedDocumentController] recentDocumentURLs]来重建最近打开的项目列表。这一段时间以来一直运作良好,但我最近得到一个报告,它挂起了用户的系统:

11 -[NSDocumentController(NSPrivate) _recentDocumentURLsForKey:] + 271 (AppKit + 5903428) [0x7fff92ae5444] 1-11 11 -[__NSOperationInternal _waitUntilFinished:] + 131 (Foundation + 1060402) [0x7fff86a1ee32] 1-11 11 __psynch_cvwait + 10 (libsystem_kernel.dylib + 94046) [0x7fff8dec6f5e] 1-11 *11 psynch_cvcontinue + 0 (pthread + 30281) [0xffffff7f80e8d649] 1-11

对于报告错误的用户,这是在升级到El Capitan之后开始的 - 他经常从网络共享加载文件,所以我猜系统阻止了试图找到文件的调用。环顾四周,这似乎已成为一个问题:http://www.cocoabuilder.com/archive/cocoa/317137-thread-deadlock.htmlhttp://ticket.macromates.com/show?ticket_id=F3058D68

问题是,虽然有几个应用程序报告问题已得到解决,但我无法找到实际的修复方法。什么是解决这个问题的合适方法?是将它卸载到后台线程唯一合适的解决方案,还是有些东西我不知道?

1 个答案:

答案 0 :(得分:0)

FWIW,我通过在应用启动时在一个单独的线程中调用recentDocumentURLs来解决这个问题。列表可用后,我会将网址放入NSMutableArray,并在此时更新NSDocumentControllerNSMutableArray

要使用数组复制NSDocumentController的行为(仅保留唯一的URL),我会删除与新网址匹配的所有网址,然后在位置0插入新网址。