2010-02-11 3 views
1

Я хочу иметь эквивалент двух полностью несвязанных таблиц в моей базе данных, и для этого я определил два разных объекта в моей модели Core Data.Несколько несвязанных объектов в одной модели данных ядра

В дополнении к этому, у меня другой ViewController делает использование каждого из этих объектов и, следовательно, я инициализирую два разных fetchedResultsController (один в каждом ViewController) подобным образом:

// Create the fetch request for the entity. 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
// Edit the entity name as appropriate. 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" 
    inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

следует отметить, что MOM инициализируется только один раз в AppDelegate на основе шаблона XCode.

Все это работало нормально, когда у меня был только один ViewController и один объект в модели, однако, хотя у меня есть второй объект, определенный в модели, я не могу заставить второй ViewController инициализировать fetchedResultsController (опять же на основе XCode шаблон). Я всегда получаю следующее сообщение об ошибке:

2010-02-11 22:02:55.078 JournalTool[3094:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'EventTag'' 

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

Спасибо,
Пол

+0

Вы используете один и тот же контекст, управляемый объект для обеих выборках? (вы должны быть) – gerry3

+0

Да, управляемая объектная модель и контекст управляемых объектов инициализируются один раз в AppDelegate, и я просто передаю этот же контекст через оба ViewControllers, например. [tagsViewController setManagedObjectContext: self.managedObjectContext]; – Paul

+0

Это может показаться глупым, но вы сбросили симулятор (если вы не работаете на устройстве) или удалили приложение из него, так как добавили второй объект в модель? Может быть, у нее все еще есть старая модель. – Don

ответ

1

Может быть, что managedObjectContext вы передаете на свой второй контроллер представления фактически nil. Перед вызовом

[tagsViewController setManagedObjectContext:self.managedObjectContext]; 

self.managedObjectContext убедитесь, что не nil:

if(!self.managedObjectContext){ 
    NSLog(@"invalid managedObjectContext"); 
    // now get a valid managedObjectContext 
    // and pass it to your view controller 
} 
+0

Сам MOC - это не нуль, но это заставило меня задуматься о заказе на моем ViewControllers. Я на самом деле пытался передать MOC через sub-ViewController, и поэтому он является вторым контроллером представления, который был нулем в этот момент. Поэтому я изменил ситуацию так, чтобы мой подзадач извлекал MOC из его родительского элемента в методе viewDidLoad, то есть self.managedObjectContext = parentViewController.managedObjectContext; Спасибо за помощь в разрешении этого, очень ценю. – Paul

+2

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

+0

Это хорошая идея, это звучит намного безопаснее.В будущем я убеждаюсь, что все мои ViewControllers имеют ссылку на AppDelegate, а затем я извлечу его непосредственно в методе viewDidLoad. Еще раз спасибо. – Paul

Смежные вопросы