我有一个集成了核心日期的应用程序。我目前定义了 2 个实体,并且该应用程序已在应用程序商店中发布
在我的下一个版本中,我想在未来版本中再添加一个实体,但是当我在模拟器中运行应用程序时,我收到以下错误
用于开设商店的模型与用于创建商店的模型不兼容。
如果我想在我的模型中添加另一个实体,我应该怎么做。
我应该创建另一个模型对象吗?
注意:我不想丢失存储在现有模型中的日期。
您需要创建模型的新版本并进行迁移。(听起来可能很轻)。看看这个链接 Apple Link
将您的 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;
}