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. Любые идеи?


person James Beith    schedule 09.01.2011    source источник


Ответы (1)


** ФИКСИРОВАННЫЙ **

Причиной была комбинация использования Bindings для заполнения моего IKImageBrowserView из NSArrayController и NSOperation, которая вызывала сохранение в своем собственном NSManagedObjectContext после заполнения обновлений.

У меня был наблюдатель уведомлений, когда контекст в NSOperation сохранялся, поэтому я мог затем объединитьChangesFromContextDidSaveNotification с контекстом моего основного потока, но мне нужно было выполнить это в MainThread. В NSArrayController для параметра automaticallyPreparesContent установлено значение YES, которое "также регистрируется в качестве наблюдателя контекста своего управляемого объекта". Таким образом, поскольку слияние было выполнено из уведомления, это выполнялось в том же отдельном потоке, что и NSOperation, и в результате NSArrayController снова готовил свое содержимое в отдельном потоке, а затем обновлял IKImageBrowserView снова в отдельном потоке, который вызывал ошибку/предупреждение.

person James Beith    schedule 11.01.2011