今天扩展用于打开存储的模型与用于使用userInfo字典创建存储的模型不兼容

时间:2014-08-01 22:06:07

标签: objective-c core-data ios8

我正在尝试创建iOS Today Extension。我想连接到主要应用程序CoreData SQL DB。但是,当我尝试连接时,我收到此错误。

“用于打开商店的模型与用于创建商店的模型与userInfo字典”不兼容“

Accessing Core Data SQL Database in iOS 8 Extension

数据库的创建发生了,我可以插入记录等。 我的扩展控制器代码现在使用与代理委托中的CoreData代码类似的代码。

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    // -- Changed for Today Screen --//
    //NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
    //                                         stringByAppendingPathComponent: @"CoreDB_2014.sqlite"]];
    NSURL *storeUrl = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.THISAPP.APPNAME"];
    NSLog(@"StoreURL1: %@", storeUrl);
    storeUrl = [storeUrl URLByAppendingPathComponent:@"CoreDB_2014A.sqlite"];
    NSLog(@"StoreURL2: %@", storeUrl);
    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
    }
    return persistentStoreCoordinator;
}

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:3)

该错误非常明显:这意味着您更改了Core Data模型,使其不再与用于创建您尝试打开的持久性存储文件的模型相匹配。那些必须匹配。如果更改模型,则需要(a)使用多个模型版本并执行到新模型的迁移,或者(b)使用不同的持久性存储文件(或删除现有文件并重新开始)。 / p>

核心数据模型经常在开发应用程序时发生变化。在大多数情况下,对于预发布应用程序,开发人员将使用选项(b)并删除以前的测试数据。如果这不可行,您需要进行模型版本控制和迁移以更新数据存储。