IKImageBrowserView "--ImageKit Ошибка: reloadData вызывается в не основном потоке"
Я пишу приложение Cocoa Mac, которое использует IKImageBrowserView. Когда я звоню следующее:
[imageBrowserView reloadData];
Консоль отладчика печатает это:
--ImageKit Error: reloadData called in non main thread
Я попытался поместить метод reloadData в другой метод, а затем вызвать следующее:
[self performSelectorOnMainThread:@selector(reloadMyView) withObject:nil waitUntilDone:NO];
Но я все еще получаю ту же ошибку ImageKit. Есть идеи?
1 ответ
** ФИКСИРОВАННЫЙ **
Причиной была комбинация использования Bindings для заполнения моего IKImageBrowserView из NSArrayController и NSOperation, который вызывал save для своего собственного NSManagedObjectContext после заполнения обновлений.
У меня был Notification Observer, когда контекст в NSOperation сохранялся, чтобы я мог затем объединить ChangesFromContextDidSaveNotification с моим контекстом основного потока, но мне нужно было выполнить это на MainThread. Для NSArrayController автоматически установлено значение YES, равное YES, которое "также регистрируется как наблюдатель контекста своего управляемого объекта". Так как слияние было выполнено из Уведомления, оно выполнялось в том же отдельном потоке, что и NSOperation, и в результате NSArrayController снова подготавливал свое содержимое в отдельном потоке, а затем обновлял IKImageBrowserView, снова в отдельном потоке, который был причиной ошибки / предупреждения.