完全关闭应用程序时核心数据删除问题

时间:2011-09-07 18:39:06

标签: iphone objective-c core-data nsfetchedresultscontroller

您好我的核心数据存储存在问题! 我按照以下方式删除它,就像我在这里发现堆栈溢出一样:

 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中!

有人可以帮我解决这个问题吗?

2 个答案:

答案 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?通常,当应用程序进入后台或终止时,您将保存上下文。