IKImageBrowserView "--ImageKit Ошибка: reloadData вызывается в не основном потоке" - PullRequest
0 голосов
/ 09 января 2011

Я пишу приложение Cocoa Mac, которое использует IKImageBrowserView. Когда я звоню следующее:

[imageBrowserView reloadData];

Консоль отладчика печатает это:

--ImageKit Error: reloadData called in non main thread

Я попытался поместить метод reloadData в другой метод и затем вызвать следующее:

[self performSelectorOnMainThread:@selector(reloadMyView) withObject:nil waitUntilDone:NO];

Но я все еще получаю ту же ошибку ImageKit. Есть идеи?

1 Ответ

2 голосов
/ 11 января 2011

** FIXED **

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

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

...