我正在使用以下代码:
+(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打印对象,它返回正确的对象,但仍然不会从我的核心数据模型中永久删除该对象。 我的实体都不与另一个实体有关系。
有谁能解释我出了什么问题?
感谢。
编辑: 我检查过错误,但没有显示错误。
答案 0 :(得分:21)
您对NSManagedObjectContext
所做的任何更改都是临时的,直到您保存为止。尝试将此添加到方法的末尾:
if (![context save:&error]) {
NSLog(@"Couldn't save: %@", error);
}
答案 1 :(得分: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();
}
}
}