当我向核心数据模型添加新属性时,我希望使我的应用程序能够进行自动的轻量级迁移。在Apple的指南中,这是我可以找到的关于该主题的唯一信息:自动轻量级迁移要请求自动轻量级迁移,您可以在addPersistentStoreWithType:configuration:URL:options:error:中传递的选项字典中设置适当的标志。您需要将与NSMigratePersistentStoresAutomaticallyOption和NSInferMappingModelAutomaticallyOption键对应的值设置为YES:NSError *error;NSURL *storeURL = <#The URL of a persistent store#>;NSPersistentStoreCoordinator *psc = <#The coordinator#>;NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];if (![psc addPersistentStoreWithType:<#Store type#> configuration:<#Configuration or nil#> URL:storeURL options:options error:&error]) { // Handle the error.}我NSPersistentStoreCoordinator是这样初始化的:- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator != nil) { return persistentStoreCoordinator; } NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"FC.sqlite"]]; NSError *error = nil; persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } return persistentStoreCoordinator;}我在查看应该在哪里以及如何添加Apple代码以使自动轻量级迁移正常工作时遇到麻烦?
3 回答
跃然一笑
TA贡献1826条经验 获得超6个赞
起初,上述解决方案对我不起作用。返回的managedObjectModel为0x0。我认为这是因为我重命名了不同模型文件的文件名。如果您按照上述说明进行操作,那么这一切都将起作用。
但是,如果您确实更改了模型文件名,则可以手动选择“当前”模型文件:假设您的原始模型文件是MYMODEL.xcdatamodel,在执行上方的添加模型步骤后将变为目录MY.xcdatamodeld,而在该目录下面MYMODEL.xcdatamodel和MYMODEL 2.xcdatamodel将新模型文件重命名为所需的名称,例如,假设您删除了MYMODEL2.xcdatamodel的空间并编辑其内容。现在在上面的代码中
NSString *path = [mainBundle pathForResource:@"MYMODEL2" ofType:@"mom" inDirectory:@"MYMODEL.momd"];
- 3 回答
- 0 关注
- 458 浏览
添加回答
举报
0/150
提交
取消