我在将应用程序从iOS 10更新到11或者使用新版本(而不是从AppStore)更新应用程序时出现问题,清除本地数据库中的所有数据。无法理解问题,因为我没有对对象进行任何更改,我不需要执行迁移。这是遗留代码,我在项目中使用Core Data堆栈初始化:
- (id)init {
self = [super init];
if (self) {
model = [[NSManagedObjectModel mergedModelFromBundles:[NSBundle allBundles]] retain];
coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
mainContext = [NSManagedObjectContext new];
undoManager = [NSUndoManager new];
[mainContext setUndoManager:undoManager];
NSURL *dataURL = [[[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] objectAtIndex:0] URLByAppendingPathComponent:@"db.sqlite"];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil
];
NSError *error = nil;
if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:dataURL options:options error:&error]) {
LOG(@"+ -- --=[ Database error: %@,\n%@ ]", [error localizedDescription], [error userInfo]);
}
[mainContext setPersistentStoreCoordinator:coordinator];
[mainContext setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:dataURL error:&error];
if (sourceMetadata) {
modelVersion = [[[sourceMetadata objectForKey:NSStoreModelVersionIdentifiersKey] objectAtIndex:0] retain];
}
}
return self;
}