因未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因是:'+entityForName: nil is not a legal NSManagedObjectContext'。

6
我得到了一个空结果。
AppDelegate.h
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

AppDelegate.m

    @synthesize managedObjectContext = __managedObjectContext;
    @synthesize managedObjectModel = __managedObjectModel;
    @synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
          Person *newPerson = [NSEntityDescription
          insertNewObjectForEntityForName:@"Person"
          inManagedObjectContext:self.managedObjectContext];
          .......

    }

我有一个xcdatamodeld文件,其中有一个名为Person的实体和一个名为name的属性。我从NSManagedObject创建了一个Person.h和.m文件。

为什么我的输出结果为null?

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Person''

断言 MOC。确保上下文不为空。同时确保 MOM 确实是您所期望的! - Daij-Djan
assert(self.managedObjectContext); - Daij-Djan
1
NSLog(@"%@", self.managedObjectModel.entitiesByName); - Daij-Djan
断言失败:(self.managedObjectContext),函数-[AppDelegate app is what I get after assert(self.managedObjectContext); - EK_AllDay
显示创建managedObjectContext的方法。 - rdelmar
4个回答

12

在你的viewController.m实现文件中,在这段代码的下面:

- (void)viewDidLoad
{

添加这段代码:

id delegate = [[UIApplication sharedApplication] delegate];
    self.managedObjectContext = [delegate managedObjectContext];

2

我意识到,在我最初创建项目时没有添加核心数据,因此缺少了在选中核心数据选项时自动生成的某些代码。因此,当我按照一些在线教程进行操作时,这些自动生成的代码就被认为是默认存在的。这就是我的失误所在。


我面临着相同的情况。我手动添加了代码来使用核心数据,现在遇到了与你一样的问题。你能分享一下你所遵循的教程吗? - Adil Malik
将来如果有人遇到这个问题,请查看以下链接:http://stackoverflow.com/questions/8076103/how-to-assign-a-managed-object-context-to-the-application-delegate-in-ios - Ńike Kamstra

0

确保在引发异常时运行的代码与您创建托管对象上下文的线程相同。


0

如果您正在使用使用NSPersistentContainer的项目模板,请确保在iOS 10+上运行,否则它将在初始化时默默失败,并在执行某些类型的Core Data操作时崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接