【发布时间】:2012-03-28 08:22:53
【问题描述】:
我创建了一个包含 10 个实体的数据模型。几天后,我在其中一个实体中添加了一个属性。这时我运行应用程序时,应用程序崩溃了。所以,请帮我解决这个问题。 提前致谢。
【问题讨论】:
-
发布您的代码。此时您的应用程序正在崩溃。你试过用断点解决吗???
标签: iphone ios xcode core-data
我创建了一个包含 10 个实体的数据模型。几天后,我在其中一个实体中添加了一个属性。这时我运行应用程序时,应用程序崩溃了。所以,请帮我解决这个问题。 提前致谢。
【问题讨论】:
标签: iphone ios xcode core-data
更改模型后,您必须删除设备/模拟器上的应用并重新安装。那是因为您现有的 SQLite-DB 不再适合现在更改的模型。
【讨论】:
如果您仍然只是开发应用程序,最简单的答案就是删除并重新安装它。
如果您真的想保留数据库的内容,Core Data 可以自动从您的架构的一个版本迁移到另一个版本(有一些警告)。 See the documentation了解详情。
【讨论】:
如果您不希望您的应用崩溃 - 每次您需要将属性添加到实体或将实体添加到模型时 - 您必须创建新的模型版本并显示托管对象模型以使用该新版本。
您可以通过以下方式创建新的模型版本:Editor -> Add Model version...。然后在您的应用委托的persistentStoreCoordinator 方法中启用自动迁移:
NSError *error = nil;
NSURL *storeURL = <#The URL of a persistent store#>;
NSPersistentStoreCoordinator *psc = <#The coordinator#>;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
BOOL success = [psc addPersistentStoreWithType:<#Store type#>
configuration:<#Configuration or nil#> URL:storeURL
options:options error:&error];
if (!success) {
// Handle the error.
}
【讨论】:
您必须让应用程序清除所有目标,然后从模拟器中构建和删除应用程序,然后再构建应用程序
【讨论】: