核心数据不保存我的数据。应用程序关闭后,我丢失了所有已保存的数据

时间:2012-03-18 13:22:21

标签: iphone ios core-data ios5

我在Xcode 3.2.5上创建了一个包含核心数据的应用程序,它运行正常。但是现在我安装了Xcode 4.3.1,现在当我关闭应用程序时,我的数据没有保存。 [context save:&error] - 不再工作(不是保存数据)。 如果有人遇到同样的问题,请说明如何解决。

2 个答案:

答案 0 :(得分:2)

如果没有更多细节,很难回答,但你应该在你的应用程序中使用这种方法:

- (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();
    } 
}
}

因此,如果出现错误,您可以在控制台中获取。

基本上,每次更改数据时,都应该调用saveContext方法,而不仅仅是在关闭应用程序时。

还要考虑核心数据随时间的变化,也许您的应用程序是针对另一个iOS版本制作的,并且您的代码需要更新。

答案 1 :(得分:0)

首先你检查崩溃日志,你可以在那里看到崩溃的原因。我打赌因为数据模型的限制,无法保存内存中的对象。

例如,对象字段之一的值为nil,但您在建模数据库时在Xcode中选择了Not Null限制。检查数据库是否存在此限制:not null,对值的附加验证(最大值,最小值,字符串的正则表达式等)。

保存后添加此代码:

if (error) {
    NSLog(@"Data cannot be saved: %@", error);
}


UPD 正如Paul.s所说,正确的检查方式是:

if (![context save:&error]) {
    NSLog(@"Data cannot be saved: %@", error);
}

有关处理错误的更多信息,例如here