在现有 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 = true
和description.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,因此您不需要显式设置它们。如果您愿意,您可以使用NSAssert
s 在完成处理程序中验证这一点。
保存上下文时出错,提示无法找到或自动推断迁移映射模型以上是关于在现有 CoreData 中添加属性,同时使用默认方法,即 persistentContainer的主要内容,如果未能解决你的问题,请参考以下文章
Core Data 轻量级迁移 - 现有实体是不是添加了新属性?