"无法加载NSManagedObjectModel.nil是一个非法的URL参数"

Zyu*_*sAn 11 iphone core-data objective-c ios

我想从AppDelegate获取托管对象上下文,但是在我将两行代码放入方法之后应用程序崩溃了,即使我没有做任何其他事情,并且调试区域中有一条消息:"CoreData:无法加载NSManagedObjectModel.nil是非法的URL参数......"

我的方法中添加的代码:

AppDelegate *delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext *managedObjectContext = delegate.managedObjectContext;
Run Code Online (Sandbox Code Playgroud)

AppDelegate中的-managedObjectModel方法:

- (NSManagedObjectModel *)managedObjectModel {
// The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
if (_managedObjectModel != nil) {
    return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FoodPin" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
Run Code Online (Sandbox Code Playgroud)

和-managedObjectContext方法:

- (NSManagedObjectContext *)managedObjectContext {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
if (_managedObjectContext != nil) {
    return _managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
    return nil;
}
_managedObjectContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
return _managedObjectContext;
}
Run Code Online (Sandbox Code Playgroud)

"FoodPin"是我的项目名称.这里有什么问题?我是iPhone编程的新手(特别是Core Data).

谁能帮我?

谢谢...

Ste*_*ord 24

问题是这一行:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"FoodPin" withExtension:@"momd"];
Run Code Online (Sandbox Code Playgroud)

modelURLnil这意味着系统无法找到资源FoodPin.momd.

确保您的项目中有一个Core Data模型FoodPin.它将显示FoodPin.xcdatamodeld在Project Navigator中.

  • 即使我的文件在我的项目中具有相同的名称,我得到相同的错误. (3认同)
  • 注意:即使文件显示扩展名为"xcdatamodeld",该方法仍应查找扩展名"momd"(因为它在此答案的代码中). (2认同)

Tom*_*det 5

我有同样的问题,但对我来说,modelURL 设置正确。问题是我的 *.xcdatamodeld 文件不再位于 Copy bundle ressources 中。我不知道为什么它消失了,但再次添加它可以解决问题。

这是修复它的方法:您项目>构建阶段>复制捆绑资源>“+”按钮并选择您的xcdatamodeld文件