我正在开发一个使用 x.x.xcdatamodel 的应用程序。现在,在同一个 x.x.xcdatamodel 中,我在其中一个实体中添加了一个属性。应用程序崩溃,显示消息“此 NSPersistentStoreCoordinator 没有持久存储(架构不匹配或迁移失败)。它无法执行保存操作。”。我尝试了很多方法,并且还使用轻量级迁移来处理这种情况,但这也不起作用。下面是我的代码:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"myApp.sqlite"];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES,
NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}
};
if(![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
return __persistentStoreCoordinator;
}
- (BOOL) saveContext
{
@synchronized (_localStorage) {
//NSLog(@"----------------------------Save context called---------------------------");
BOOL result = TRUE;
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil)
{
//Crashes here at this line.
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
NSLog(@"----------------------------Save context failed---------------------------");
result = FALSE;
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
}
//NSLog(@"----------------------------Save context completed---------------------------");
return result;
}
}
我在这里错过了什么吗?或者即使我在实体中添加单个属性,我是否也必须执行完整的迁移?提前致谢。
您不必在这里自己进行迁移。你do必须添加新版本的数据模型。您无法编辑xcdatamodel
并期望 Core Data 仅使用新版本。您需要保留现有模型,创建新版本并进行更改在新版本中。您必须始终拥有与持久存储文件匹配的模型版本。
您可以通过选择创建新版本xcdatamodel
在 Xcode 的文件浏览器中打开模型文件,转到“编辑器”菜单,然后选择“添加模型版本...”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)