0

我为我的应用程序重新设计了核心数据模型,超出了轻量级迁移的工作范围。所以我现在在应用程序包中有两个核心数据模型,我需要单独访问每个模型(用于常规核心数据设置和手动迁移),这意味着[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?

4

1 回答 1

0

该方法正在100%工作,因此文件根本不存在;)

要么你打错了..要么 cAsE 错误,或者你的模型没有版本化(!)

编译应用程序并查看 %APPP%/Resources/。有 OldModel.momd 文件夹吗?

于 2016-11-13T09:27:38.777 回答