Objective c managedObjectModel:initWithContentOfURL中出错

Objective c managedObjectModel:initWithContentOfURL中出错,objective-c,core-data,model,init,object-model,Objective C,Core Data,Model,Init,Object Model,我试图重用使用数据核心的xcodeproj。我将它导入到我的新项目中,当我尝试进行一些类初始化时,我得到了以下错误 “NSInvalidArgumentException”,原因:“*-[NSURL initFileURLWithPath::设置de managedObjectModel时出现nil字符串参数”错误 这是我的密码: - (NSManagedObjectModel *)managedObjectModel { if (managedObjectModel == nil) {

我试图重用使用数据核心的xcodeproj。我将它导入到我的新项目中,当我尝试进行一些类初始化时,我得到了以下错误

“NSInvalidArgumentException”,原因:“*-[NSURL initFileURLWithPath::设置de managedObjectModel时出现nil字符串参数”错误

这是我的密码:

- (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.xcdatamodel

有什么问题吗?我错过了什么重要的事情吗


非常感谢。

您正在将
nil
传递到
fileURLWithPath

根据你的代码,这意味着

   modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"mom"];
nil
指定给
modelPath
,以便您可以查看数据模型文件的正确名称


还要检查数据模型文件是否包含在目标中。

您的文件类型
mom
应该是
momd

然后试着像下面那样打印modelPath或modelURL,并检查它是否为nil。将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);
我解决了


我必须在与AppDelegate相同的组中拥有我的DataModel.xcdatamodel的副本。所以我从另一个xcodeproj添加了它,最后它工作了

,我如何检查它?我的意思是,我的数据模型文件叫做DataModel.xcdatamodel。我还可以做什么来检查实际名称?它是否添加到当前目标?重命名DataModel.xcdatamodeld文件。关闭并重新打开Xcode客户端可能会解决此问题。两行的输出都是(null)。重命名DataModel.xcdatamodeld文件。这个问题可以通过关闭并重新打开Xcode客户端来解决。它不起作用。它类似于DataModel.xcdatamodeld没有被编译或复制。但是它包含在targetRename中,仅对模型文件进行命名是不够的,因为它不会将引用重命名为当前模型版本。结果是模型版本存储在一个单独的plist文件中。只需在文本编辑器中打开它,并将旧名称更改为新的模型文件名。文件:YourNEWModelFile.xcdatamodeld/.xccurrentversion\u XCCurrentVersionName YourModelFile.xcdatamodel