ошибка с основными данными в контексте nsmanagedobject - PullRequest
0 голосов
/ 18 декабря 2011

Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «+ entityForName: не удалось найти NSManagedObjectModel для имени объекта« Персоны »'*

Сущность создается в файле модели данных, и я добавил основные функции данных в файл делегата приложения.

Я пытаюсь использовать данные ядра в моем первом контроллере представления, который находится во вкладке, выполнив это:

- (IBAction)save:(id)sender {

NSLog(@"String is %d", [choiceSeg selectedSegmentIndex]);

NSManagedObjectContext *context = self.managedObjectContext;

Persons *person = (Persons *)[NSEntityDescription insertNewObjectForEntityForName:@"Persons" inManagedObjectContext:context];

NSNumber *ageValue = [NSNumber numberWithInt:[choiceSeg selectedSegmentIndex]];

[person setAge:ageValue];  

// Save the context
if (![context save:nil]) { 
    // error checking
}

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

Что я сделал не так?

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Эта ошибка возникает, когда ваш экземпляр NSManagedObjectContext равен нулю.Рекомендуемый способ предоставления контекста контроллеру представления - передача по ссылке.Передать контекст от вашего приложения через UITabBarController на первый контроллер представления довольно просто.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)options
{
    // Assuming you don't already have a property for this (i.e. setup by a storyboard)
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

    if (!tabBarController.viewControllers.count)
        return;

    FirstViewController *fvc = (FirstViewController *)[tabBarController.viewControllers objectAtIndex:0];

    // Assumes that this view controller has a public writable @property for a context.
    fvc.managedObjectContext = self.managedObjectContext;

    // ... [self.window makeKeyAndVisible]; etc...
}

Я понимаю, что это не лучший способ сделать это, потому что элементы панели вкладок можно-организованы, и мы явно ищем первый.Может быть целесообразно проверить класс возвращаемого контроллера представления, прежде чем пытаться установить для него контекст.

0 голосов
/ 19 декабря 2011

ОК, поэтому я импортировал AppDelegate.h в свой контроллер представления и использовал его managedObjectContext для ввода элемента в основные данные.

 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context = [appDelegate managedObjectContext];

Это работает!

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

...