在现有 CoreData 中添加属性,同时使用默认方法,即 persistentContainer

Posted

技术标签:

【中文标题】在现有 CoreData 中添加属性,同时使用默认方法,即 persistentContainer【英文标题】:Adding Attribute in existing CoreData while using default method i.e persistentContainer 【发布时间】:2018-07-12 17:27:00 【问题描述】:

我正在现有 CoreData 中添加新属性,并且我正在使用默认方法,即应用程序委托文件中的 persistentContainer,而不是 persistentStorecordinator。那么在哪里添加这些选项:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

我已经在 core_data 模式中添加了版本号。搜索后我发现这两个属性默认都是true是真的

【问题讨论】:

【参考方案1】:

详见Requesting lightweight migration

NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] 
initWithManagedObjectModel:mom];
NSDictionary *options = @NSMigratePersistentStoresAutomaticallyOption: @YES, 
                          NSInferMappingModelAutomaticallyOption: @YES;
NSError *error = nil;
if (![psc addPersistentStoreWithType:NSSQLiteStoreType 
                       configuration:nil 
                                 URL:storeURL 
                             options:options error:&error]) 
    NSAssert(NO, @"Unable to load persistent store: %@\n%@", 
             [error localizedDescription], [error userInfo]);

【讨论】:

@paticleman ,这些代码在persistentStorecordinator的getter方法中返回,但我没有使用我正在使用persistentContainer(getter)。 您可以在加载前创建NSPersistentStoreDescription并将其设置为容器的container.persistentStoreDescriptions。设置description.shouldInferMappingModelAutomatically = truedescription.shouldMigrateStoreAutomatically = true 在哪里?? - (NSPersistentContainer *)persistentContainer @synchronized (self) if (_persistentContainer == nil) _persistentContainer = [[NSPersistentContainer alloc] initWithName:@"CubnTimeInOut"]; [_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *storeDescription, NSError *error) if (error != nil) NSLog(@"%@, %@", error, error.userInfo);中止(); ]; 返回 _persistentContainer; 查看代码会有所帮助。如果您不指定NSPersistentStoreDescription,则持久化容器将默认创建一个。它在loadPersistentStoresWithCompletionHandler: 的完成处理程序中返回给您。原始问题中两个 NSPersistentStoreDescription 属性的默认值为 YES,因此您不需要显式设置它们。如果您愿意,您可以使用NSAsserts 在完成处理程序中验证这一点。 保存上下文时出错,提示无法找到或自动推断迁移映射模型

以上是关于在现有 CoreData 中添加属性,同时使用默认方法,即 persistentContainer的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 轻量级迁移 - 现有实体是不是添加了新属性?

添加新属性时,CoreData 无法完成错误

使用 Objective-C 将 CoreData 添加到现有项目中

核心数据 - 编辑、递增和保存属性到现有实体

将 CoreData 添加到现有项目

将 CoreData 添加到现有项目后出错