我为我的应用程序重新设计了核心数据模型,超出了轻量级迁移的工作范围。所以我现在在应用程序包中有两个核心数据模型,我需要单独访问每个模型(用于常规核心数据设置和手动迁移),这意味着[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]
.
我已经阅读了这个和这个并尝试了建议的解决方案,其中包括确保将模型添加到资源列表中以在构建阶段复制到包中,验证区分大小写的文件名,以及在URLForResource
方法中处理文件扩展名。我想我可以将全新的模型呈现为旧模型的新版本,并简单地防止持久存储选项中的自动迁移......但我的方法应该有效。为什么突然无法在 app bundle 中获取模型的 URL?