Проблема устойчивости/производительности комплекта отдыха с MOC Multiplie

Это первый раз, когда я использовал новую версию RestKit и несколько MOC, поэтому они меня немного озадачили. Я использую RestKit 0.20-pre5 и добавляю управляемые объекты с помощью операций RestKit, а также вручную во всем приложении.

RestKits предоставляет два MOC для управления производительностью: контексты объекта mainQueue и PersistantStore. После проверки кода RestKits все новые управляемые объекты сохраняются в MOC mainQueue (на основе строки 433 RKObjectManager и проверки различных адресов указателей). Объекты, созданные RestKit, сохраняются нормально (конечно, после вызова сохранения), однако всякий раз, когда я создаю свои собственные ManagedObjects в том же MOC mainQueue и сохраняю его, они не сохраняются при перезапуске приложения. (Я сохраняю соответствующий MOC довольно часто)

Вот где появляется постоянное хранилище. Всякий раз, когда я сохраняю постоянное хранилище вместе с MOC mainQueue, данные сохраняются. Я предполагаю, что это как-то связано с изменениями слияния RKManagedObjectStore всякий раз, когда я вызываю сохранение в persistantStoreMOC (через уведомление). Итак... все хорошо, верно?

Проблема в том, что всякий раз, когда я сохраняю оба контекста, возникает заметная задержка, которая длится не менее 1 секунды (может варьироваться до 3!). Это отставание, кажется, увеличивается по мере того, как я создаю больше NSManagedObjects. Я запускал инструменты, и проблем с памятью нет. Должно быть, я неправильно использую реализацию основных данных RestKits.

Для записи я сохраняю, используя следующий метод:

- (void)saveContext
{
    __block BOOL _blockSuccess;
    __block NSError *_blockError;

    NSManagedObjectContext *persistantContext = [[[RKObjectManager sharedManager] managedObjectStore] persistentStoreManagedObjectContext];

    [globalManagedObjectContext performBlockAndWait:^{
            _blockSuccess = [globalManagedObjectContext save:&_blockError];
    }];
    if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);

    [persistantContext performBlock:^{
        _blockSuccess = [persistantContext save:&_blockError];
        if (! _blockSuccess) NSLog(@"Failed to save context: %@", _blockError);
    }];
}

Это вызывается из одноэлементного объекта всякий раз, когда мы хотим сохранить состояние приложения. (globalManagedObjectContext — это просто макрос, указывающий на RestKits mainQueueObjectContext). Удаление сохранения persistantContext устраняет задержку, но, конечно, не сохраняет данные.

Любая помощь (особенно Блейк Уоттерс;) будет принята с благодарностью!

Ваше здоровье,

Арон


person Aron    schedule 23.01.2013    source источник
comment
Вы нашли решение? У меня такая же путаница. В моем случае я использовал persistenceStoreManagedObjectContext во всем своем коде, и эти изменения сохраняются очень хорошо, но я почти уверен, что это не предполагаемый способ сделать это.   -  person rufo    schedule 14.02.2013


Ответы (1)


Я считаю, что ответ заключается в использовании метода saveToPersistentStore:, добавленного категорией RKAdditions в NSManagedObjectContext.

Это взято из здесь и здесь.

У вас все еще есть проблемы при использовании этого?

person rufo    schedule 13.02.2013
comment
Извините за задержку с ответом, к сожалению, не работает. Я также не могу использовать persistantStoreMOC, потому что у меня есть объекты в основном контексте (загруженные через RestKit), которые должны взаимодействовать с созданными объектами, поэтому это решение не сработает. - person Aron; 18.03.2013
comment
Извините, я беру свои слова обратно ... это работает нормально, но был неправильный метод очистки, из-за которого я думал, что ничего не сохраняется должным образом. - person Aron; 18.03.2013