此NSPersistentStoreCoordinator没有持久性存储(架构不匹配或迁移失败).它无法执行保存操作

Uza*_*ada 2 xcode core-data core-data-migration xcdatamodel

我正在使用xxxcdatamodel的应用程序.现在在同一个xxxcdatamodel中,我在其中一个实体中添加了一个属性.应用程序崩溃,显示消息"此NSPersistentStoreCoordinator没有持久存储(模式不匹配或迁移失败).它无法执行保存操作." 我尝试了很多东西,我也使用轻量级迁移来处理这种情况,但这样做不太好.我的代码是:

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

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"myApp.sqlite"];

    NSError *error = nil;
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    NSDictionary *options = @{
                              NSMigratePersistentStoresAutomaticallyOption : @YES,
                              NSInferMappingModelAutomaticallyOption : @YES,
                              NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}
                              };

    if(![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
    {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    }

    return __persistentStoreCoordinator;
}




- (BOOL) saveContext
{
    @synchronized (_localStorage) {
        //NSLog(@"----------------------------Save context called---------------------------");
        BOOL result = TRUE;
        NSError *error = nil;
        NSManagedObjectContext *managedObjectContext = self.managedObjectContext;

        if (managedObjectContext != nil)
        {
            //Crashes here at this line.
            if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
            {
                NSLog(@"----------------------------Save context failed---------------------------");
                result = FALSE;
                NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            }
        }

        //NSLog(@"----------------------------Save context completed---------------------------");

        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?或者即使我在实体中添加单个属性,我是否必须执行完整的迁移?提前感谢.

Tom*_*ton 11

您不必在此自行迁移.你必须添加数据模型的新版本.您无法编辑xcdatamodel并期望Core Data只使用新版本.您需要保留现有模型,创建新版本,并在新版本中进行更改.您必须始终拥有与持久性存储文件匹配的模型版本.

您可以通过xcdatamodel在Xcode的文件浏览器中选择模型文件,转到"编辑器"菜单,然后选择"添加模型版本..." 来创建新版本.

  • 我不小心在旧版本的代码数据而不是新版本中添加了属性。我从旧模型中删除了这些属性,但现在有同样的错误。 (2认同)