Завершение приложения из-за необнаруженного исключения "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+ или он будет молча с инициализацией и сбоем при выполнении какой-то операции с основными данными.