Завершение приложения из-за необнаруженного исключения "NSInvalidArgumentException", причина: "+ entityForName: nil не является юридическим NSManagedObjectContext

Я получаю нулевой результат для

AppDelegate.h

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

AppDelegate.м

    @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. Я создал человека.h и .M файл из NSManagedObject.

почему я получаю значение null для моего вывода.

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

4 ответов


в вашем viewController.M файл реализации, прямо под этим битом кода:

- (void)viewDidLoad
{

добавить этот кусок кода:

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

Я понял, что, поскольку я не добавлял основные данные, когда я первоначально создал проект, мне не хватало некоторого кода, который автоматически генерируется, когда опция core data отмечена галочкой. Таким образом, когда я следил за некоторыми учебниками в интернете, этот автоматически сгенерированный код предполагается. Вот тут я и облажался.


убедитесь, что код, выполняемый при возникновении исключения, выполняется в том же потоке, в котором был создан контекст управляемого объекта.


Если вы используете шаблон проекта, который использует NSPersistentContainer, убедитесь, что вы запустите его на iOS 10+ или он будет молча с инициализацией и сбоем при выполнении какой-то операции с основными данными.