2012-08-06 68 views

回答

0

如果您希望它在顯示警報的同時發生,您需要在後臺線程中進行保存。

最簡單的方法是使用嵌套上下文,並從主要上下文中保存。

無論你正在創建你的管理對象方面,與更換分配/初始化部分...

NSManagedObjectContext *parentMoc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
parentMoc.persistentStoreCoordinator = persistentStoreCoordinator; 
self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
self.managedObjectContext.parentContext = parenetMoc; 

現在,你有你在使用前相同的MOC,但它是一個主隊列MOC,父級上下文在後臺隊列中運行。

儘管如此,您將不得不使用一種方法來保存上下文。第二次保存在父項中,發生在後臺線程中,所以您不必等待。現在

- (void)saveData { 
    NSError *error = nil; 
    NSManagedObjectContext *moc = self.managedObjectContext; 
    if ([moc save:&error]) { 
     moc = moc.parentContext; 
     [moc performBlock:^{ 
      NSError *error = nil; 
      if (![moc save:&error]) { 
       // Handle the actual save error 
      } 
     }]; 
    } else { 
     // Handle the error of saving up into the parent context... 
    } 
} 

,而不是調用[managedObjectContext節省:&錯誤]直接與SAVEDATA的消息替換它,並且該方法將幾乎立即返回,與實際保存在後臺線程會發生。

應用程序中的其他任何代碼(除保存調用外)都不得不根本改變。

就你的情況而言,就在您提出警報之前,請致電保存,保存將在警報顯示時發生。

+0

感謝您的廣泛回答,但您確定這是從alertview中的提示中保存文本的方式嗎?導致你在談論:「在顯示警報時保存會發生。」實際上當我在alertview中點擊'保存'時需要保存。 – Fuzej 2012-08-07 16:48:14

+0

從你的問題中,我想到了當你顯示警報時,你想在後臺保存核心數據上下文。如果你正在尋找不同的東西,那麼也許嘗試提高你的問題,因爲現在我不知道你在做什麼。 – 2012-08-07 17:38:05

+0

有一個單元格,我推動那個單元格,一個alertview彈出,我在這個alertview中輸入文本,這個輸入的文本我想要顯示在選中的單元格中,同時保存在覈心數據中。希望現在清楚。 – Fuzej 2012-08-07 18:54:21