Я схожу с ума, пытаясь понять это. Я работаю над приложением, которое синхронизирует данные с веб-сервера. Существует фоновый поток, который извлекает данные с сервера на приложение. В то же время я вношу изменения в пользовательский интерфейс. Значения, измененные в пользовательском интерфейсе, сохраняются в основных данных на переднем плане.Основные данные Одиночный управляемый объект Контекст и два потока
Через приложение у меня есть один управляемый объектОбъект, который я получаю из делегата приложения каждый раз, когда создаю fetchController. Код делегирования приложения
- (NSManagedObjectContext *)managedObjectContext
{
if (__managedObjectContext != nil) {
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
Теперь проблема в том, что я получаю ошибку при попытке сохранить контекст. Ошибки происходят случайно в коде. Я сохраняю контекст, как только я вношу изменения в любой объект. Кроме того, у меня есть два отношения каждый в каждом сущности один к своему ребенку, который является одним для многих и один для своих родителей, который является одним. Все отношения имеют соответствующий обратный.
Я думаю, что я делаю что-то концептуально неправильно здесь, опираясь на один контекст. Не могли бы вы посоветовать мне, как мне управлять контекстом в ситуации, когда потоки фонового и переднего плана читаются и записываются в исходные тексты. Благодарю.
Вы используете инициализацию своего MOC с ограничением потока, поэтому вы должны использовать его только в потоке, который его создал ... скорее всего, основной поток. В этом нет ничего неправильного ... но как вы создаете MOC для сохранения фона? Если вы используете тот же MOC, это ваша проблема. Прочтите документацию по параллелизму с основными данными. –