2010-02-18 2 views
2

Я провел пару часов сегодня, пытаясь создать настройку, в которой у меня есть три контекста управляемых объектов: один прикреплен к делегату моего приложения, один в подклассе NSObject, отвечающий за обновления UITableView (через NSFetchedResultsController) и один в NSOperation подкласс.Как я могу синхронизировать несколько NSManagedContext?

я могу получить изменения от NSOperation подкласса к приложению делегата течь через просто отлично, наблюдая NSManagedObjectContextDidSaveNotification и стреляя mergeChangesFromContextDidSaveNotification: на основном потоке, но когда я пытаюсь сделать то же самое с моей UITableView источника данных, Я получаю следующее исключение:

2010-02-19 02:00:39.750 MyApp[44687:207] Serious application error. Exception was caught during Core Data change processing: *** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0] with userInfo (null) 
2010-02-19 02:00:39.750 MyApp[44687:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFArray initWithObjects:count:]: attempt to insert nil object at objects[0]' 

Я был бы признателен за любые советы - все мои предыдущие проекты с участием управляемого объекта основных данных контексты очень просто 1: 1 сценариев синхронизации. Возможно ли, что я предлагаю?

+1

Вы использовали отладчик? Что это говорит о вашей попытке вставить nil в NSArray? В частности, сломайте objc_exception_throw и определите часть своего кода, вызывающего эту проблему. –

+0

Джошуа, это на самом деле идет от: - (Недействительными) контроллер: (NSFetchedResultsController *) контроллер didChangeObject: (идентификатор) anObject atIndexPath: (NSIndexPath *) indexPath forChangeType: (NSFetchedResultsChangeType) типа newIndexPath: (NSIndexPath *) newIndexPath { \t NSArray * paths = [NSArray arrayWithObject: newIndexPath]; По-видимому, NSArray не может быть инициализирован indexPath из {0,0}. Все еще выясняю, почему это происходит. –

ответ

9

Лучший вопрос: ПОЧЕМУ вы пытаетесь синхронизировать несколько контекстов. Наличие двух, один для вашего основного использования приложения и один для импорта имеет смысл, но контекст импорта не нужно синхронизировать, и вы уже знаете, как передать основной контекст из контекста импорта.

Для чего нужен третий контекст? ЕСЛИ это просто обновление табличного представления, это плохой дизайн, и вы должны использовать один контекст для всего слоя пользовательского интерфейса. Скорее всего, это правильное решение вашей проблемы, вместо того, чтобы пытаться манипулировать тремя контекстами в воздухе.

+0

Вот что мне нужно было услышать. По какой-то причине я убедил себя (в 2 часа ночи), что мне нужен другой контекст управляемого объекта. Я просто был жадным! Спасибо, как всегда, Маркус! –

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