2014-12-13 30 views
0

我在我的應用程序中使用多上下文核心數據方案。我有一個類的網絡請求方法- (void)getCurrencysWithParentContext:(NSManagedObjectContext*)parentContext; 在這裏我創建一個操作來解析xml-answer。此操作具有自己的NSPrivateQueueConcurrencyType上下文。在該操作結束時,我打電話插入的管理對象屬性爲零

if ([self.managedObjectContext save:&error]) 
    { 
     __weak typeof(self) weakSelf = self; 
     [self.parentContext performBlock:^{ 
      NSError *error; 
      if (![weakSelf.parentContext save:&error]) 
      { 
       NSLog(@"Parent context context save error %@", error); 
      } 
     }]; 
    } 
    else 
     NSLog(@"Child context save error %@", error); 
與不 零

self.managedObjectContext.insertedObjects返回實體屬性:

(實體:幣種; ID: 0x7a7b8cb0 ; 數據:{ 則charCode = RUR; 標稱= 1; orderNo = 0; 率=( ); sbrfID =無; 符號= 「\ U20bd」;

weakSelf.parentContext.insertedObjects回報

(單位:元幣種; id:0x7a7b8cb0 ; data:{ charCode = nil; nominal = 0; orderNo = 0; rates =( ); sbrfID = nil; sign = nil;對於相同的對象ID。

爲什麼?我做什麼不正確?如何正確地將更改推送到父上下文?

+0

我擔心,因爲保存在父上下文計劃與一個塊,你在'保存'之前檢查它發生......? – stevesliva 2014-12-14 05:32:45

回答

0

從核心數據編程指南:

保存在後臺線程是容易出錯的

異步隊列和線程不會阻止應用程序退出。 (具體而言,所有基於NSThread的線程都是「分離的」,請參閱pthread的文檔以獲取完整的詳細信息,並且只有在所有未分離的線程都退出時纔會運行進程)。因此,如果您在後臺線程中執行保存操作,它可能在它能夠完成之前被殺死。如果您需要保存在後臺線程上,則必須編寫其他代碼,以便主線程可以阻止應用程序退出,直到完成所有保存操作。

只保存子上下文,如果成功,則保存父上下文而不打擾併發API。

相關問題