我为我的应用程序重新设计了核心数据模型,超出了轻量级迁移的作用。所以我现在在应用程序包中有两个核心数据模型,我需要单独访问每个模型(用于常规核心数据设置和手动迁移),这意味着[NSManagedObjectModel mergedModelFromBundles:nil]
不适合/不会工作。问题是我无法获取任何一个模型的URL,这阻止我使用[NSManagedObjectModel alloc] initWithContentsOfURL:
实例化它们。这些是我使用的方法,它们都返回NULL:
- (NSURL *)currentModelURL{
return [[NSBundle mainBundle] URLForResource:@"NewModel" withExtension:@"momd"];
}
- (NSURL *)oldModelURL{
return [[NSBundle mainBundle] URLForResource:@"OldModel" withExtension:@"momd"];
}
事实上,当我在其他应用程序上尝试此方法时,即使是具有单一模型的应用程序,也不会返回模型URL。这很奇怪,因为我的应用程序的先前版本通过使用上述方法通过URL获取模型而运行得很好...而不是[NSManagedObjectModel mergedModelFromBundles]
。
我已阅读this和this并尝试了建议的解决方案,其中包括确保将模型添加到资源列表中以在构建阶段复制到捆绑包,验证区分大小写的文件名,并使用URLForResource
方法中的文件扩展名取消操作。我想我可以将全新的模型渲染为旧版本的新版本,并且只是阻止持久存储选项中的自动迁移......但我的方法应该可行。为什么突然无法获取应用包中的模型的URL?
答案 0 :(得分:0)
方法正在100%工作,因此文件根本就不存在;)
你得到一个错误..或cAsE错了或你的模型没有版本化(!)
编译应用程序并查看%APPP%/ Resources /。是否有OldModel.momd FOLDER?