您好我的核心数据存储存在问题! 我按照以下方式删除它,就像我在这里发现堆栈溢出一样:
NSFetchRequest * allFriends = [[NSFetchRequest alloc] init];
[allFriends setEntity:[NSEntityDescription entityForName:@"Friend" inManagedObjectContext:self.managedObjectContext]];
[allFriends setIncludesPropertyValues:NO]; //only fetch the managedObjectID
NSError * error = nil;
NSArray * friends = [self.managedObjectContext executeFetchRequest:allFriends error:&error];
[allFriends release];
//error handling goes here
for (NSManagedObject * Friend in friends) {
[self.managedObjectContext deleteObject:Friend];
}
这种接缝在运行时完美运行! 我的tableview(我用NSFetchedResultsController管理)清除,看起来一切都很好! 此外,当我按下主页按钮并重新启动它时,它可以工作。
但是如果我从多任务列表中关闭它(完全关闭它)并重新启动它,所有的都会再次返回tableView中!
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
您的代码很好,但您忘记了提交对数据库进行的所有更改(删除了对象)。因此,您应该在代码中添加以下行,并在重新打开应用程序后,您的数据库将不包含该对象:
NSError *error;
if (![self.managedObjectContext save:&error])
{
// Update to handle the
NSLog(@"Unresolved error %@", error);
exit(-1); // Fail
}
由于所有更改都存储在内存中,因此在进行一些重要或重要更改后,请不要忘记保存托管对象上下文。在提交更改之前,database / presistent-store文件将处于先前保存的状态。
答案 1 :(得分:1)
您在退出之前是否在保存managedObjectContext
?通常,当应用程序进入后台或终止时,您将保存上下文。