Фоновая MOC «save:» не имеет никакого эффекта (но возвращает YES) - PullRequest
0 голосов
/ 13 февраля 2012

Рассмотрим следующий код:

[context performBlock:^{
    // add a bunch of objects to context

    NSError *error;
    if(![context save:&error])
        NSLog(@"Couldn't save MOC because of error: %@", error.localizedDescription);
}];

Это внутри класса «Менеджер магазина», который имеет геттеры для 2 MOC: стандарт .objectContext и .backgroundObjectContext, который инициализируется с помощьюследующее:

backgroundObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
backgroundObjectContext.parentContext = self.objectContext;

Моя проблема : когда я устанавливаю context на self.objectContext, все в порядке, и данные сохраняются в файл .sqlite.Когда я устанавливаю self.backgroundObjectContext, в файл sqlite не записываются никакие данные, но save: возвращает YES без ошибок.Я попытался войти в этот контекст registeredObjects, и все есть.Почему данные не записываются в файл sqlite?

Я уже давно пользуюсь новыми API MOC iOS 5, и я впервые сталкиваюсь с этой проблемой, поэтому я 'Я довольно невежественен.Вы так инициализируете фоновый MOC в iOS 5?Есть ли что-то еще, что я мог бы здесь упустить?

1 Ответ

3 голосов
/ 13 февраля 2012

Когда вы сохраняете childContext, изменения объединяются с parentContext.Для записи в файл вам необходимо сохранить контекст в корне.

Так что в этом случае:

  • вы сохраняете backgroundObjectContext для объединения изменений с objectContext

  • Вы сохраняете objectContext для сохранения в PSC

...