Проблема привязки между Core Data и NSArrayController

Я пытаюсь настроить привязку между Core Data, NSArraycountroller и NSTableView. Чтобы получить NSManagedObjectContext для NSArrayController. Я перетащил NSObject в IB и назвал его в честь appDelegate, а затем установил привязку objectContext между appDelegate и arrayController.

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

Сообщение об ошибке:

The managed object model version used to open the persistent store is incompatible with
the one that was used to create the persistent store

А затем последовало еще одно сообщение об ошибке:

Failed to initialize store.

Я погуглил, большинство людей могут решить эту проблему, очистив свой проект или удалив файлы в ~ / Library / Application Support / AppName / .. Но мне с ними не везет.

Другое дело, что мне отчаянно нужен хороший учебник по этой теме (CoreData + ArrayController + TableView). Может ли кто-нибудь пролить свет на это? Я прочитал главу 11 книги «Программирование какао для Mac OSX 4-й версии», но не нашел ее действительно полезной.

Спасибо.


person Robert Kang    schedule 12.06.2012    source источник


Ответы (2)


Наконец решил эту проблему. Думаю, дело в реските. Reskit имеет свой собственный managedObjectContext в комплекте с CoreData. Вот почему мне постоянно говорят, что две объектные модели несовместимы. Контроллер NSArrayController должен быть привязан к managedObjectContext в RKManager, а не в appDelegate.

Итак, я поместил это в метод инициализации контроллера представления:

RKObjectManager *objectManager = [RKObjectManager sharedManager];
currentObjectContext = objectManager.objectStore.managedObjectContextForCurrentThread;

И укажите managedObjectContext в объекте NSArrayController на currentObjectContext.

person Robert Kang    schedule 13.06.2012

Ошибка связана с вашей управляемой объектной моделью; это не связано с вашими привязками или табличным представлением. Если это происходит при запуске приложения (а не при попытке открыть документ), вероятно, это происходит во время восстановления автоматически сохраненных документов.

Попробуйте удалить что-нибудь связанное из ~ / Библиотека / Автосохранение информации и посмотрите, решит ли это первоначальную проблему.

person paulmelnikow    schedule 12.06.2012
comment
Когда я узнал об этом, я работал с Руководством по программированию табличного представления и Руководством по программированию основных данных. В каждом есть много важных деталей, но ни один из них не является учебным пособием, которое вы ищете. - person paulmelnikow; 13.06.2012
comment
Спасибо, нет. Я попробовал ваше предложение, но проблема осталась прежней. Чтобы избежать путаницы, я удалил все привязки, которые установил для табличного представления. Теперь приложение связывает CoreData только с NSArrayController. А для привязок к NSArrayController я установил путь ключа модели к managedObjectContext, который привязывается к экземпляру в appDelegate. - person Robert Kang; 13.06.2012
comment
И не уверен, имеет ли это значение, но я использовал Restkit в этом проекте. Инициализируется с помощью objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename: @ test.sqlite]; в appDelegate.m - person Robert Kang; 13.06.2012
comment
Вероятно, отсюда и возникла ошибка. Я почти не знаком с RestKit, но попробуйте удалить этот файл. Документы говорят, что он находится в каталоге документов приложения. - person paulmelnikow; 13.06.2012