iOS应用程序更新清除核心数据数据库

时间:2017-11-10 08:27:15

标签: ios objective-c core-data database-migration

我在将应用程序从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;
}

0 个答案:

没有答案