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