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

来源:互联网 发布:手机屏幕特效软件 编辑:程序博客网 时间:2024/09/21 09:19

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

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

{

    if (_persistentStoreCoordinator !=nil) {

        return_persistentStoreCoordinator;

    }

    

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

 

    NSError *error = nil;

    _persistentStoreCoordinator = [[NSPersistentStoreCoordinatoralloc] initWithManagedObjectModel:[selfmanagedObjectModel]];

    if (![_persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeURL options:nilerror:&error]) {

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

        abort();

    }

    

    return_persistentStoreCoordinator;

}

这个时候分两种情况:

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

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

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

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

         [[NSFileManagerdefaultManager] removeItemAtURL:storeURLerror:nil];   //删除数据库

         [[NSUserDefaultsstandardUserDefaults] setBool:YESforKey:@"isDeleteDB"];

         [[NSUserDefaultsstandardUserDefaults] synchronize];

    }

其中用userDefaults控制一下。

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

1 0