Вызов `[[[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.

Другие вопросы по тегам