核心数据模型是一个捆绑包,它被添加到主项目中。现在我必须将核心数据迁移到更新的模型。我一直在关注一些示例like this,所以我想在任何查询或导入之前迁移数据库。所以我将代码放在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中,但当时没有加载包含核心数据模型的包。抓住捆绑说它尚未加载。所以我无法启动迁移过程。
如何强制它加载此捆绑包?
将核心数据模型放在除主捆绑之外的单独捆绑中是一种好方法吗?
编辑:
- (NSManagedObjectModel*)objectModel
{
if (_objectModel)
return _objectModel;
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:kDataManagerBundleName ofType:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
NSString *modelPath = [bundle pathForResource:kDataManagerModelName ofType:@"momd"];
_objectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];
return _objectModel;
}
对于迁移部分,它表示bundle尚未加载,并为pathForResource返回nil。
答案 0 :(得分:0)
您可以使用NSBundle
方法load
强制加载包(docs here)。编辑:正如您所说,这仅适用于可执行代码,而不适用于资源。
关于将CoreData模型放在一个单独的包中,如果您想在多个应用程序中重用该模型(和/或任何其他资源),这是一种常见做法。如果您不希望没有理由拥有单独的捆绑IMO。
答案 1 :(得分:0)
我最终在主捆绑中移动数据模型,因为在启动时无法加载资源包。