gpt4 book ai didi

objective-c - 核心数据 : model is nil while modelURL is valid

转载 作者:可可西里 更新时间:2023-11-01 05:14:32 25 4
gpt4 key购买 nike

__managedObjectModel 为零,即使 modelURL 存在。有 a similar post ,但接受的答案(重命名模型文件并重新启动 Xcode)对我不起作用。

- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil) {
return __managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Failed" withExtension:@"momd"];

__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

return __managedObjectModel;
}

我在控制台中输入 modelURL

(lldb) po modelURL
(NSURL *) $4 = 0x088832f0 file://localhost/Users/philip/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/9E59167C-8D9E-4ADE-BBD7-0BE9A33A6A86/Failed.app/Failed.momd/

最佳答案

我在 3 小时后解决了问题......终于。解决方案很简单:只需使用以下代码

__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];

代替

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Failed" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

原因是我曾经创建了新的模型文件(.xcodemodeld)并删除了旧的。并且这两个模型文件有不同的名称。事实上,旧模型文件根本没有被删除。它仍然在应用程序主包中。

我检查了 iphone 模拟器目录,惊讶地看到两个编译模型文件 (.momd) 都在那里!我试图删除旧妈妈。但是每次我的应用程序开始运行时,老妈妈都会再次出现。我去检查目标构建阶段并确保旧模型文件不在编译源中。太奇怪了..

由于main bundle中存在多个编译后的模型文件,需要将它们合并。这就是 mergedModelFromBundles: 代替单个 modelURL 发挥作用的原因。

如果您从不删除任何模型文件,使用单个 modelURL 应该没问题。

虽然问题解决了,但我不明白为什么模拟器会在主包中保留所有已删除的模型文件。这对我来说没有意义。有人会解释吗?

关于objective-c - 核心数据 : model is nil while modelURL is valid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11942105/

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