NSFetchedResultsController и NSOperation - PullRequest
       13

NSFetchedResultsController и NSOperation

4 голосов
/ 12 декабря 2010

В UITableViewController я использую NSFetchedResultsController для своих данных. Все работает нормально, за исключением случая, когда я начинаю импортировать некоторые объекты в отдельном потоке: я использую NSOperationQueue, в который я вставляю объекты в мой ManagedObjectContext. Это происходит в отдельном представлении. NSFetchedResultsController не похоже на это и пишет в консоль:

Серьезная ошибка приложения. Исключение было получено от делегата NSFetchedResultsController во время вызова -controllerDidChangeContent :. Попытка создать две анимации для ячейки с userInfo (null)

Очевидно, он пытается получить новые объекты.

В отношении параллелизма Руководство по программированию базовых данных говорит что-то вроде использования ManagedObjectContext для каждого потока, но это звучит довольно сложно.

Теперь я не знаю, должен ли я на самом деле создать свой собственный подкласс NSOperation, создать в нем ManagedObjectContext и т. Д., Или можно ли предотвратить обновление NSFetchedResultsController в течение некоторого времени?

Буду признателен за помощь, Фабиан

1 Ответ

4 голосов
/ 12 декабря 2010

Вам нужно NSManagedObjectContext за нить, извините!

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

Тем не менее, это только контекст, который вам нужно создать для каждого потока. Просто напишите в своем делегате метод, который создает контекст управляемого объекта, и вызовите его в каждой из ваших NSOperations - это сделает их для каждого потока вместо того, чтобы использовать один и тот же.

Управляемый контекст в вашем основном потоке также может быть создан с помощью этого метода.

...