5

我正在使用以下代码:

+(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 打印对象,它返回了正确的对象,但该对象仍然没有从我的核心数据模型中永久删除。我的实体没有一个与另一个实体有关系。

谁能解释我出了什么问题?

谢谢。

编辑:我检查了错误,但没有显示错误。

4

2 回答 2

24

NSManagedObjectContext在保存之前,您对 a 所做的任何更改都是暂时的。尝试将其添加到方法的末尾:

if (![context save:&error]) {
     NSLog(@"Couldn't save: %@", error);
}
于 2012-12-21T12:38:48.383 回答
3

NSManagedObjectContext提供了一个便签本:你可以对你的对象做任何你喜欢的事情,但最后需要保存它。如果您使用的是默认的 Core Data 项目,请在您的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();
        } 
    }
}
于 2012-12-21T12:41:05.997 回答