Мне очень сложно отключить кеширование во фреймворке Restkit. Я попытался отключить политику кеширования, но безрезультатно. Как правильно это сделать?
Ресткит, отключить кеширование
Ответы (1)
Итак, если у вас есть клиент, либо явно инициализируйте его:
RKClient *client = [RKClient clientWithBaseURL:url];
или позволив диспетчеру объектов сделать это:
RKObjectManager* om = [RKObjectManager managerWithBaseURLString:url];
RKClient *client = om.client;
Это должен быть простой вопрос настройки политики кеширования:
client.cachePolicy = RKRequestCachePolicyNone;
Это то, что вы делали?
Обновление: так как сообщение журнала - единственное, что беспокоит, я решил отследить его источник. Версия tl; dr заключается в том, чтобы игнорировать сообщение и доверять тому, что вам сообщает прокси-сервер ведения журнала.
Чтобы дважды проверить, я искал «Недействительный кеш в пути», нашел его в двух местах RKCache invalidateSubDirectory:
и RKCache invalidateAll
и установил на них точки останова. Вот частичная трассировка стека из моего кода:
#0 0x000e6c66 in -[RKCache invalidateSubDirectory:] at RestKit/Code/Support/RKCache.m:189
#1 0x0006b767 in -[RKRequestCache invalidateWithStoragePolicy:] at RestKit/Code/Network/RKRequestCache.m:237
#2 0x0006b958 in -[RKRequestCache setStoragePolicy:] at RestKit/Code/Network/RKRequestCache.m:253
#3 0x00069abf in -[RKRequestCache initWithPath:storagePolicy:] at RestKit/Code/Network/RKRequestCache.m:60
#4 0x000586f3 in -[RKClient baseURLDidChange:] at RestKit/Code/Network/RKClient.m:339
#5 0x000589ce in -[RKClient observeValueForKeyPath:ofObject:change:context:] at RestKit/Code/Network/RKClient.m:373
#6 0x0183cd91 in NSKeyValueNotifyObserver ()
#7 0x0183c895 in NSKeyValueDidChange ()
#8 0x0182233e in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] ()
#9 0x01844a82 in _NSSetObjectValueAndNotify ()
#10 0x00057404 in -[RKClient initWithBaseURL:] at RestKit/Code/Network/RKClient.m:176
#11 0x00056df3 in +[RKClient clientWithBaseURL:] at RestKit/Code/Network/RKClient.m:130
Просматривая это, я узнал, что есть два перечисления, которые управляют кешированием:
RKRequestCachePolicy
это то, что вы устанавливаете на клиенте, он контролирует, когда запрашивается кеш.RKRequestCacheStoragePolicy
, который определяет, как долго результаты хранятся на устройстве (никогда, продолжительность сеанса, постоянно).
В рамках настройки клиента, когда установлен URL-адрес, клиент создает новый кеш с RKRequestCacheStoragePolicyPermanently
настройкой политики хранения, включающей очистку кеша предыдущего сеанса и - если кэширование отключено - постоянного кеша. Это та очистка, которую вы видите в сообщениях журнала.