我有一个集成了核心日期的应用。我目前已定义了2个实体,并且该应用已在应用商店中存在
在我的下一个版本中,我想在未来版本中添加一个实体,但是当我在模拟器中运行应用程序时,我收到以下错误
用于打开商店的模型与用于创建商店的模型不兼容。
如果我想在模型中添加其他实体,我该怎么办。
我应该创建另一个模型对象吗?
注意:我不想丢失现有模型中存储的日期。
答案 0 :(得分:1)
您需要创建模型的新版本并进行迁移。 (听起来很轻巧)。看看这个链接 Apple Link
答案 1 :(得分:0)
将persistentStoreCoordinator创建更改为此(替换YOURDB):
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"YOURDB.sqlite"]];
// handle db upgrade
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Handle error
}
return persistentStoreCoordinator;
}
版本化您的数据模型并编辑新文件
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"YOURRESOURCENAME" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}