Phi*_*007 4 core-data objective-c ios
__managedObjectModel即使是modelURL也存在.有一个类似的帖子,但接受的答案(重命名模型文件和重新启动Xcode)对我不起作用.
- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil) {
return __managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Failed" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}
Run Code Online (Sandbox Code Playgroud)
我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/
Run Code Online (Sandbox Code Playgroud)
我在3个小时后解决了这个问题.最后.解决方案很简单:只需使用以下代码即可
__managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
Run Code Online (Sandbox Code Playgroud)
代替
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Failed" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
Run Code Online (Sandbox Code Playgroud)
原因是我曾经创建了新的模型文件(.xcodemodeld)并删除了旧的模型文件.这两个模型文件有不同的名称.实际上,旧模型文件根本不会被删除.它仍然在app主要包中.
我检查了iphone模拟器目录,并惊奇地看到两个已编译的模型文件(.momd)都在那里!我试图删除老妈妈.但每次我的应用程序运行时,老妈妈再次出现.我去检查目标构建阶段并确保旧模型文件不在编译源中.太奇怪了..
由于主捆绑中存在多个已编译的模型文件,因此需要将它们合并.这就是为什么mergedModelFromBundles:发挥作用而不是单一的原因modelURL.
如果你从不删除任何模型文件,使用单个modelURL应该没问题.
虽然问题解决了,但我不明白为什么模拟器会将所有已删除的模型文件保存在主包中.这对我来说没有意义.有谁会解释?
| 归档时间: |
|
| 查看次数: |
2379 次 |
| 最近记录: |