由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'+ entityForName:nil不是合法的NSManagedObjectContext

时间:2013-05-05 18:51:24

标签: ios objective-c xcode core-data

我的

结果为空

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''

4 个答案:

答案 0 :(得分:12)

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

- (void)viewDidLoad
{

添加这段代码:

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

答案 1 :(得分:2)

我意识到,由于我最初创建项目时没有添加Core Data,因此我错过了一些在核心数据选项被选中时自动生成的代码。因此,当我在线学习一些教程时,会假设这个自动生成的代码。这就是我搞砸的地方。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果您使用的是使用NSPersistentContainer的项目模板,请确保在iOS 10+上运行此模板,否则当您执行某种核心数据操作时,它会因初始化而崩溃并崩溃。