gpt4 book ai didi

ios - 如何编辑从 iOS5 中的 momd 加载的 NSManagedObjectModel

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:33:45 25 4
gpt4 key购买 nike

对于我使用 CoreData 的 iOS 应用程序,我需要一个模型,其中某些实体属性在应用程序的 iPhone 和 iPad 版本之间有所不同。为此,我使用 initWithContentsOfURL: 从位于我的应用程序包中的 momd 文件加载了一个 NSManagedObjectModel。但是,在 storeCoordinator 实际使用模型之前,我在模型中以编程方式修改了一些实体(基于我存储在设备特定 plist 中的信息)。这曾经在 iOS4 上完美运行。正如 Apple 在其文档中所述,

Managed object models are editable until they are used by an object graph manager (a managed object context or a persistent store coordinator).

在 iOS5 中似乎不再是这种情况(尽管文档仍然说明了这一点)。一旦创建模型,使用 initWithContentsOfURL: 例如,任何修改尝试都会抛出“NSInternalInconsistencyException”,原因:“无法修改不可变模型”。如果我在创建模型对象后立即在调试器中打印模型对象的描述,它显示为“isEditable 0”,而在 iOS4 上运行相同的代码时,它显示为“isEditable 1”。

按照 Apple 的建议,在模型上使用“copy”创建一个可编辑的副本,也会返回一个带有“isEditable 0”的模型。

我看到了两个可能的解释:

  • 错误。我在 openradar 上找不到匹配的错误报告,如有必要,我会提交一份。
  • iCloud 集成。我还不太熟悉 iCloud API,但我知道可以设置与 CoreData 的某种集成。我想也许某些自动协调器可以在创建模型时访问我的模型,使其不可编辑。

我将继续深入研究这些选项,但如果有人对此有经验,我将不胜感激。

最佳答案

这是一个错误或未记录的更改。我运行了这个测试代码:

  NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TestManageObjectModelEdits" withExtension:@"momd"];
NSManagedObjectModel *mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSEntityDescription *e=[[NSEntityDescription alloc] init];
[e setName:@"PEntity"];
NSArray *a=[mom entities];
NSArray *b=[a arrayByAddingObject:e];
[mom setEntities:b];
NSLog(@"mom = %@",mom);

... 在 iOS 4.3 和 5.0 下。它在 4.3 下工作并抛出一个错误,说它不能在 5.0 下修改模型文件。

关于ios - 如何编辑从 iOS5 中的 momd 加载的 NSManagedObjectModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com