Вызов `[[[NSDocumentController sharedDocumentController] недавний DocumentURLs]` зависает
У меня есть приложение, которое обычно звонит [[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 и http://ticket.macromates.com/show?ticket_id=F3058D68.
Проблема в том, что, хотя несколько приложений сообщают, что проблема устранена, я не смог отследить фактическое исправление. Что было бы подходящим способом исправить это? Является ли разгрузка на фоновый поток единственным подходящим решением или мне чего-то не хватает?
1 ответ
FWIW, я работал над этим, позвонив recentDocumentURLs
в отдельном потоке, при запуске приложения. Как только список будет доступен, я помещаю URL-адреса в NSMutableArray
и с этого момента обновления как NSDocumentController
и NSMutableArray
,
Чтобы повторить поведение NSDocumentController
используя массив (сохраняйте только уникальные URL), я удаляю все URL, соответствующие новому URL, затем вставляю новый в позицию 0.