我正在编写一个使用IKImageBrowserView的Cocoa Mac应用程序。 当我打电话给以下人员时:
[imageBrowserView reloadData];
调试器控制台打印出这个:
--ImageKit Error: reloadData called in non main thread
我尝试将reloadData方法放在另一个方法中,然后调用以下内容:
[self performSelectorOnMainThread:@selector(reloadMyView) withObject:nil waitUntilDone:NO];
但我仍然得到相同的ImageKit错误。有什么想法吗?
答案 0 :(得分:2)
**固定**
原因是使用Bindings从NSArrayController填充我的IKImageBrowserView,以及在填充更新后调用save自己的NSManagedObjectContext的NSOperation。
我有一个Notification Observer,当NSOperation中的上下文保存时,我可以 mergeChangesFromContextDidSaveNotification 到我的主线程上下文,但我需要在MainThread上执行此操作。 NSArrayController将 automaticPreparesContent 设置为YES,“也注册为其托管对象上下文的观察者”。因此,当从通知执行合并时,这是在与NSOperation相同的单独线程上完成的,因此NSArrayController在单独的线程上再次准备它的内容,然后再次在单独的线程上更新IKImageBrowserView导致错误/警告。