我正在開發一個應用程序,其中與後端同步不應該阻止用戶界面。 因此,我確實使用許多MOC和那些通過其performBlock方法(將自動在後臺線程中完成)操作下載和導入的MOC。不同的線程中的ManagedObjectContexts - 不同的對象引用
我的背景MOCS創建爲主要MOC的孩子:
context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setParentContext:aConfiguration.context];
coordinator = aConfiguration.coordinator;
model = aConfiguration.model;
store = aConfiguration.store;
errorHandler = aConfiguration.errorHandler;
所以大部分工作正常,到目前爲止,但有一個顯著的問題。 我下載文本和圖像數據。因此,在用戶界面中,我想首先顯示文本,然後對於每個下載的圖像,淡入此下載的圖像。 通常沒有問題,下載完成圖像下載,並調用其委託(服務)ALA
downloder:(id<Downloader) aDownloader didFinishDownloadImageItem: (id) aObjectWithImage
而aObjectWithImage與新下載的圖片我的模型對象。
代表將投放對象的通知,並張貼此通知
NSDictionary *userInfo = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObject:aObjectWithImage]
forKeys:[NSArray arrayWithObject:EntityWithImageDownloadedNotificationInfoKeyEntity]];
[[NSNotificationCenter defaultCenter] EntityWithImageDownloadedNotification object:self userInfo:userInfo];
這裏開始的問題。假設我的UIViewController會觀察這些通知。收到一個後,他會搜索他的對象數組,以顯示信息字典中的一個來更改圖像。
你看到問題了嗎?他永遠不會找到這個東西!由於這個事實,最初這個對象是在後臺線程中創建的,因此是另一個MOC,UIViewController的對象數組(主MOC)中的對象引用總是與通知(後臺MOC)發佈的對象引用不同。
我知道如何解決這個問題,發佈通知的委託可以在其MOC(這是主要的)上搜索對象,但我有點不喜歡這個想法。我認爲這沒有錯,因爲服務也創建了後臺線程,所以它知道在委託方法中接收的所有對象都在後臺線程的MOC中。
一些建議如何我可以更好地處理這個問題?
我真的很感謝你的任何想法!
這就是我正在做的atm(請參閱我的編輯)。我的主要MOC是NSMainQueueConcurrencyType,而我所有的後臺moc都是主要MOC的孩子。 插入和erverything其他工作正常,但對象引用是不同的,因爲對象是在子上下文中創建的,所以父上下文確實有其他引用緩存到我的託管對象 – Alexander 2012-03-23 10:32:55