managedObjectModel:initWithContentOfURL 中的错误
Posted
技术标签:
【中文标题】managedObjectModel:initWithContentOfURL 中的错误【英文标题】:managedObjectModel: Error in initWithContentOfURL 【发布时间】:2012-09-10 09:00:19 【问题描述】:我试图重用一个使用数据核心的 xcodeproj。我将它导入到我的新项目中,当我尝试进行一些类初始化时,出现以下错误
'NSInvalidArgumentException',原因:'* -[NSURL initFileURLWithPath:]: nil string parameter' 设置 de managedObjectModel 时出错。
这是我的代码:
- (NSManagedObjectModel *)managedObjectModel
if (managedObjectModel == nil)
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"momd"];
NSURL *modelURL = nil;
if (modelPath == nil)
modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"mom"];
modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel;
导致错误的行是
modelURL = [NSURL fileURLWithPath:modelPath];
看起来我找不到 DataModel。我的数据模型文件名为 DataModel.xcdatamodel
有什么问题?我错过了什么重要的事情吗?
非常感谢。
【问题讨论】:
【参考方案1】:您将nil
传递给fileURLWithPath
。
从你的代码来看,这意味着
modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"mom"];
将nil
分配给modelPath
,因此您可以查看数据模型文件的正确名称。
还要检查数据模型文件是否包含在您的目标中。
【讨论】:
我该如何检查呢?我的意思是,我的数据模型文件称为 DataModel.xcdatamodel。我还能做些什么来检查实际名称是什么? 是否已添加到您当前的目标中? 重命名 DataModel.xcdatamodeld 文件。关闭并重新打开 Xcode 客户端可能会解决此问题。【参考方案2】:您的文件类型mom
应为momd
。
然后尝试像下面这样打印 modelPath 或 modelURL 并检查它是否为 nil.you 将 nil 传递给 modelURL = [NSURL fileURLWithPath:modelPath];
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"momd"];
NSLog(@"%@",modelPath);
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DataModel" withExtension:@"momd"];
NSLog(@"%@",modelURL);
【讨论】:
我得到 (null) 作为两行的输出。 重命名 DataModel.xcdatamodeld 文件。该问题可能通过关闭并重新打开 Xcode 客户端来解决。 它没有用。它就像 DataModel.xcdatamodeld 没有被编译或复制。但它包含在目标中 仅重命名模型文件是不够的,因为它不会将引用重命名为当前模型版本。事实证明,模型版本存储在一个单独的 plist 文件中。只需在文本编辑器中打开它并将旧名称更改为新模型文件名。文件:YourNEWModelFile.xcdatamodeld/.xccurrentversion好吧,我解决了。
我必须在我的 AppDelegate 所在的组中拥有我的 DataModel.xcdatamodel 的副本。所以我从另一个 xcodeproj 中添加了它,最后它工作了
【讨论】:
以上是关于managedObjectModel:initWithContentOfURL 中的错误的主要内容,如果未能解决你的问题,请参考以下文章
覆盖UIManagedDocument中的managedObjectModel
ManagedObjectModel 子类在 Swift 中不起作用
managedObjectModel 为零(仅在 WatchApp 中)
在 tableview 中显示图像时 managedObjectModel 错误指令
核心数据 NSEntityDescription.entityForName 返回 nil,但 managedObjectModel.entities 列出了实体