调用`[[NSDocumentController sharedDocumentController] recentDocumentURLs]`挂起
Call to `[[NSDocumentController sharedDocumentController] recentDocumentURLs]` hangs
我有一个应用程序会定期调用 [[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.html and http://ticket.macromates.com/show?ticket_id=F3058D68。
问题是,虽然有几个应用程序报告问题已解决,但我无法追踪到实际修复。什么是解决此问题的合适方法?将其卸载到后台线程是唯一合适的解决方案,还是我遗漏了什么?
FWIW,我通过在应用程序启动时在单独的线程中调用 recentDocumentURLs
来解决这个问题。列表可用后,我将 URL 放入 NSMutableArray
,并从那时起更新 NSDocumentController
和 NSMutableArray
。
为了使用数组复制 NSDocumentController
的行为(只保留唯一的 URLs),我删除了所有匹配新 URL 的 URLs,然后在位置 0 插入新的。
我有一个应用程序会定期调用 [[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.html and http://ticket.macromates.com/show?ticket_id=F3058D68。
问题是,虽然有几个应用程序报告问题已解决,但我无法追踪到实际修复。什么是解决此问题的合适方法?将其卸载到后台线程是唯一合适的解决方案,还是我遗漏了什么?
FWIW,我通过在应用程序启动时在单独的线程中调用 recentDocumentURLs
来解决这个问题。列表可用后,我将 URL 放入 NSMutableArray
,并从那时起更新 NSDocumentController
和 NSMutableArray
。
为了使用数组复制 NSDocumentController
的行为(只保留唯一的 URLs),我删除了所有匹配新 URL 的 URLs,然后在位置 0 插入新的。