2011-01-09 4 views
0

IKImageBrowserView를 사용하는 Cocoa Mac 앱을 쓰고 있습니다. 나는 다음과 같은 호출 할 때 :IKImageBrowserView "--ImageKit Error : reloadData가 메인이 아닌 스레드에서 호출되었습니다."

[imageBrowserView reloadData]; 

디버거 콘솔 출력이 :

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

: 나는 다른 방법으로 reloadData 방법을 배치하고 다음을 호출 시도

--ImageKit Error: reloadData called in non main thread 

하지만 여전히 동일한 ImageKit 오류가 발생합니다. 어떤 아이디어?

답변

1

** ** 고정

이유는 NSArrayController에서 내 IKImageBrowserView을 채우기 위해 바인딩을 사용하는 조합 및 업데이트를 채우는 후 자신의 NSManagedObjectContext에 저장라는 NSOperation이었다.

나는 내가 다음 내 주요 스레드 컨텍스트에 mergeChangesFromContextDidSaveNotification하지만, i를 MainThread에서이 작업을 수행하는 데 필요한 수 NSOperation의 컨텍스트를 저장하는 경우에 대한 알림 관찰자가 있었다. NSArrayController는 automaticallyPreparesContent이 YES로 설정된 이 "관리 대상 개체 컨텍스트의 관찰자로 등록됩니다"입니다. 따라서 NSOperation과 동일한 별도의 스레드에서 병합이 수행됨에 따라 NSArrayController는 별도의 스레드에서 내용을 다시 준비하고 IKImageBrowserView를 다시 별도의 스레드에서 업데이트합니다. 오류/경고가 발생했습니다.