2012-12-21 99 views
5

我使用下面的代碼:核心數據deleteObject:不工作?

+(void)deleteObject:(NSManagedObjectID*)oId { 
NSError *error; 
DFAppDelegate *temp = [DFAppDelegate new]; 
NSManagedObjectContext *context = [temp managedObjectContext]; 
NSManagedObject *obj = [context existingObjectWithID:oId error:&error]; 
[context deleteObject:obj]; 
} 

但它似乎並沒有相應的工作。當我在iOS模擬器上重新啓動應用程序時,我可以在列表中再次看到對象。 我試圖用給定的對象ID打印對象,它正在返回正確的對象,但仍然不會永久刪除該對象形成我的核心數據模型。 我的實體沒有一個與另一個實體有關係。

任何人都可以解釋我有什麼問題嗎?

謝謝。

編輯: 我檢查了錯誤,但沒有顯示錯誤。

回答

17

NSManagedObjectContext所做的任何更改都是暫時的,直到您保存爲止。嘗試添加給你的方法結束:

if (![context save:&error]) { 
    NSLog(@"Couldn't save: %@", error); 
} 
+0

謝謝...代碼現在工作.... –

3

NSManagedObjectContext提供了一個便籤:你可以做任何你與你喜歡的對象,但需要將其保存在最後。如果您使用的是默認核心數據項目,看看這個方法在你AppDelegate

- (void)saveContext 
{ 
    NSError *error = nil; 
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext; 
    if (managedObjectContext != nil) { 
     if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { 
      // Replace this implementation with code to handle the error appropriately. 
      // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
      NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
      abort(); 
     } 
    } 
} 
+0

謝謝...我得到的概念。 –