更新:我想的問題是,當孩子上下文保存不更新父上下文。仍然需要幫助。多上下文CoreData使用線程
我已經嘗試了多上下文(父 - 子)核心數據的許多例子。
此前,我的應用程序使用傳統的存儲數據的方式,即我使用OperationQueue從服務器獲取數據並使用MOC保存到數據庫並保存到mainMOC的mergeChanges通知:NSManagedObjectContextDidSaveNotification 。
而不干擾該應用的流動,(即除去OperationQueue),我試圖執行親子ManagedObjectContext關係,其中我用concurrencyType一個privateMOC爲NSPrivateQueueConcurrencyType
具有persistantStoreCoordinator,並與concurrenyType的mainMOC如NSMainQueueConcurrencyType
這是私人機構的孩子。並且在隊列中,我有一個tempMOC,其中concurrencyType爲NSPrivateQueueConcurrencyType
,它是mainMOC的子項。
同時節約,我窩三個MOCS的performBlock
爲 -
[tempMOC performBlock:^{
if (![tempMOC save:&error]) {
NSLog(@"Error : %@",error);
}
[mainMOC performBlock:^{
if (![mainMOC save:&error]) {
NSLog(@"Error : %@",error);
}
[privateMOC performBlock:^{
if (![privateMOC save:&error]) {
NSLog(@"Error : %@",error);
}
}];
}];
}];
我得到這樣的錯誤CoreData 1560和1570,而mainMOC試圖保存。 NSValidationErrorKey
錯誤,它說有些值是nil
。 是否tempMOC的變化不會去mainMOC?我沒有挖掘,但據我所知,它不應該是零。 什麼可能是錯誤?請幫忙。
更新:我試圖打印tempMOC的對象,我看到這樣正確的價值觀:
<Element_Name: 0xc0b59c0> (entity: Element_Name; id: 0xc07ca90 <x-coredata:///Element_Name/t2DCD57A8-4C1A-4AF7-A10E-5B9603E2BB8730> ; data: {
tag1 = nil;
tag2 = 3430065;
tag3 = 600;
tag4 = N;
tag5 = "2013-10-29 00:00:00 +0000";
tag6 = nil;
tag7 = 327842701;
relation = "0xbf1f760 <x-coredata://87C54A94-701E-4108-826E-4D98A53380F9/Relation/p1>";
tag8 = "Some_Value";
我試圖打印mainMOC的對象,我看到nil
價值,而不是像數據:
<Element_Name: 0xbd47a50> (entity: Element_name; id: 0xc0b14b0 <x-coredata:///Element_Name/t2DCD57A8-4C1A-4AF7-A10E-5B9603E2BB8740> ; data: {
tag1 = nil;
tag2 = nil;
tag3 = 0;
tag4 = nil;
tag5 = nil;
tag6 = nil;
tag7 = nil;
relation = "0xbd586c0 <x-coredata://87C54A94-701E-4108-826E-4D98A53380F9/relation/p1>";
tag8 = nil;
當通過notification-NSManagedObjectContextDidSaveNotification更新主MOC時,背景插入MOC掛起UI。 經過一番谷歌搜索之後,我發現父母孩子MOC沒有掛起UX,與傳統的MOC相比 – vshall
我無法確認代碼是否正在嘗試訪問設置,試圖嵌入保存在performBlockAndWait也。 – vshall
vshall,由於您沒有列出您的來源,因此您認爲爲什麼您認爲親子MOC更快並且不掛斷用戶界面,我無法解決您的問題。根據我的經驗,情況並非如此。至於你的情況,我認爲你正試圖在保存之前訪問數據。你也許可以通過延遲閱讀代碼來測試它是如此。安德魯 – adonoho