coreData报错:The model used to open the store is incompatible with the one used to create the store

报这个错误,说明你在运行这次程序时,更改了数据库中的表内容,比如更改了表属性,或者增加了一张表等。这个时候运行就会报这个错误。告诉你,用来创建数据库的模型和你用来打开数据库的模型是不相容的,也就是你动了这个model,动了数据库中表的内容。一般程序崩溃会在下面的函数崩溃:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

{

    if (_persistentStoreCoordinator != nil) {

        return _persistentStoreCoordinator;

    }

    

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"storeName"];

 

    NSError *error = nil;

    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

        abort();

    }

    

    return _persistentStoreCoordinator;

}

这个时候分两种情况:

1. 如果你不是在更新app,只是在简单的跑应用,那么把程序卸载重装就能解决问题。

2. 如果你是在更新app,那这个时候就有点难办了。

   1)如果不要求保存数据库里的数据的话,可以在上面的函数里面增加下面的代码:

     if (![[NSUserDefaults standardUserDefaults] boolForKey:@"isDeleteDB"]) {

         [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];   //删除数据库

         [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isDeleteDB"];

         [[NSUserDefaults standardUserDefaults] synchronize];

    }

其中用userDefaults控制一下。

  2)如果要保存数据库里的数据,那么就要做数据迁移了,即把原数据库中的数据迁移出来,保存,然后再写入新数据库中。

你可能感兴趣的:(数据库,数据迁移,coredata)