Ресткит, отключить кеширование

Мне очень сложно отключить кеширование во фреймворке Restkit. Я попытался отключить политику кеширования, но безрезультатно. Как правильно это сделать?


person Gael.D    schedule 27.02.2012    source источник


Ответы (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 настройкой политики хранения, включающей очистку кеша предыдущего сеанса и - если кэширование отключено - постоянного кеша. Это та очистка, которую вы видите в сообщениях журнала.

person drewish    schedule 20.07.2012
comment
Спасибо за ваш ответ. Я только что попробовал и все еще получил сообщение restkit.support:RKCache.m:178 Недействительный кеш по пути: - person Gael.D; 25.07.2012
comment
Это единственное, что предполагает кеширование? Вы пробовали использовать Charles или другой прокси для ведения журнала, чтобы узнать, что происходит на сервере? - person drewish; 25.07.2012
comment
Я пробовал вести журнал прокси, ничего не случилось, я получил ожидаемые данные с сервера. На самом деле, в поведении приложения все идет не так, как надо, мои данные в порядке, все идет так, как ожидалось. Но мой регистратор продолжает выдавать мне эти сообщения. Недействительный кеш на пути: ..... Похоже, что restkit пытается удалить существующий файл кеша, но не может. Как уже было сказано, я просто обеспокоен тем, что эти действия не влияют на производительность или проверку Apple. - person Gael.D; 01.08.2012
comment
Я только что добавил в свой ответ дополнительную информацию. Вкратце, он делает именно то, что должен, и не о чем беспокоиться. Почему вам не нужно никакого кеширования? - person drewish; 01.08.2012
comment
Первый: мне нужно было отладить, и неприятно видеть его заполненным этим сообщением. Второй: большая часть приложения (около 60-70%) работает в режиме реального времени. - person Gael.D; 01.08.2012
comment
@ Gael.D Как вы думаете, на этот вопрос есть ответ? Кажется, вы уже подтвердили, что кеширование было отключено несколько комментариев назад. Что еще я могу сделать? - person drewish; 02.08.2012
comment
На вопрос действительно есть ответ. Проблема вроде правда там, там :) - person Gael.D; 02.08.2012