0

我正在编写一个使用 IKImageBrowserView 的 Cocoa Mac 应用程序。当我调用以下内容时:

[imageBrowserView reloadData];

调试器控制台打印以下内容:

--ImageKit Error: reloadData called in non main thread

我尝试将 reloadData 方法放在另一个方法中,然后调用以下命令:

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

但我仍然得到相同的 ImageKit 错误。有任何想法吗?

4

1 回答 1

2

** 固定的 **

原因是使用 Bindings 从 NSArrayController 填充我的 IKImageBrowserView 和 NSOperation 在填充更新后调用它自己的 NSManagedObjectContext 的组合。

我有一个通知观察者,用于保存 NSOperation 中的上下文,因此我可以将ChangesFromContextDidSaveNotification 合并到我的主线程上下文中,但我需要在 MainThread 上执行此操作。NSArrayController 的自动PreparesContent设置为 YES,它 “也注册为其托管对象上下文的观察者”。因此,由于从通知执行合并,这是在与 NSOperation 相同的单独线程上完成的,因此 NSArrayController 再次在单独的线程上准备其内容,然后再次在单独的线程上更新 IKImageBrowserView导致错误/警告。

于 2011-01-11T20:40:38.650 回答