0

IKImageBrowserView を使用する Cocoa Mac アプリを作成しています。以下を呼び出すと:

[imageBrowserView reloadData];

Debugger Console はこれを出力します:

--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 を設定することと、更新を設定した後に独自の NSManagedObjectContext で保存を呼び出す NSOperation の組み合わせでした。

NSOperation のコンテキストが保存されたときの通知オブザーバーがあったので、ChangesFromContextDidSaveNotificationをメイン スレッド コンテキストにマージできましたが、これを MainThread で実行する必要がありました。NSArrayController には、「管理対象オブジェクト コンテキストのオブザーバーとしても登録する」 YES に設定された 自動的に PreparesContent があります。そのため、通知からマージが実行されたため、これは NSOperation と同じ別のスレッドで実行されていました。その結果、NSArrayController は別のスレッドでコンテンツを再度準備し、IKImageBrowserView を別のスレッドで更新していました。エラー/警告の原因でした。

于 2011-01-11T20:40:38.650 に答える