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

EK_*_*Day 6 xcode core-data objective-c ios

我得到一个null结果

AppDelegate.h

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
Run Code Online (Sandbox Code Playgroud)

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];
          .......

    }
Run Code Online (Sandbox Code Playgroud)

我有一个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''
Run Code Online (Sandbox Code Playgroud)

小智 12

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

- (void)viewDidLoad
{
Run Code Online (Sandbox Code Playgroud)

添加这段代码:

id delegate = [[UIApplication sharedApplication] delegate];
    self.managedObjectContext = [delegate managedObjectContext];
Run Code Online (Sandbox Code Playgroud)


EK_*_*Day 2

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