gpt4 book ai didi

iphone - managedObjectModel 为 nil(无法使用 nil 模型创建 NSPersistentStoreCoordinator)

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

我有这种特殊情况,我的应用程序在一段时间内运行良好,但在一段时间后不一致地崩溃。我在崩溃期间遇到的错误是“无法使用 nil 模型创建 NSPersistentStoreCoordinator”

我尝试调试我的应用程序,发现 managedObjectModel 有时会返回 NULL。火上浇油,这个场景一点都不符合。 managedObjectModel 有一段时间没问题。但是,突然它返回 NULL...

这是我用来创建托管对象模型的代码。

- (NSManagedObjectModel *)managedObjectModel 
{
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSBundle *newBundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"dataBundle" withExtension:@"bundle"]];
NSString *modelPath = [newBundle pathForResource:@"DataHouse" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

NSLog(@"managedObjectModel_ %@", [managedObjectModel_ entities]);

return managedObjectModel_;
}

正如您在上面看到的,由于一些特殊要求,我将我的 .xcdataModeld 文件放在一个单独的包 中并从那里引用它。我很震惊,需要一些帮助....谢谢

最佳答案

首先,确保您永远不会将 managedObjectModel_ 重置为 nil。只需在您的源代码中搜索“managedObjectModel_ =”,唯一的结果应该在您发布的 managedObjectModel 代码中。

其次,确保 managedObjectModel_ 无法从外部访问或(如果将 managedObjectModel 公开为属性)只读。

第三,确保管理核心数据栈的类只有一个实例。如果它是在主窗口 nib 中初始化的 UIApplication 委托(delegate),则不应以编程方式创建它。如果是单例,检查是否真的有它的单个实例。

当您绝对确定一切正确时,是时候进行更深入的挖掘了。您可以尝试在 GDB 中将观察点设置为 managedObjectModel_

您的代码中可能发生的最糟糕的事情是一种 memset/memmove 操作,它们碰巧覆盖了您的 Core Data 堆栈管理器占用的内存。但是这种错误太随机了,不能总是命中给定的内存地址,所以我不会指望它。

关于iphone - managedObjectModel 为 nil(无法使用 nil 模型创建 NSPersistentStoreCoordinator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9212313/

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