2012-02-27 23 views

Respuesta

7

Así que una vez que tienes un cliente, ya sea de forma explícita inicializándola:

RKClient *client = [RKClient clientWithBaseURL:url]; 

o al permitir que el administrador de objetos de hacerlo:

RKObjectManager* om = [RKObjectManager managerWithBaseURLString:url]; 
RKClient *client = om.client; 

Debe ser una simple cuestión de sólo la creación la política de caché:

client.cachePolicy = RKRequestCachePolicyNone; 

¿Era eso lo que estaba haciendo?

Actualización: Como el mensaje de registro es lo único preocupante, decidí rastrear su origen. La versión de tl; dr es ignorar el mensaje y confiar en lo que el proxy de registro le está diciendo.

Para comprobarlo de nuevo, busqué "Invalidar el caché en el camino" y lo encontré en dos ubicaciones RKCache invalidateSubDirectory: y RKCache invalidateAll y establecí los puntos de interrupción en ellas. He aquí un seguimiento de la pila parcial de algunos de mi código:

#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 

lo que aprendí mirando a través de esto es que hay dos enumeraciones que controlan el almacenamiento en caché:

  • RKRequestCachePolicy que es lo que se establece en el cliente, controla cuando se consulta la caché.
  • RKRequestCacheStoragePolicy que determina por cuánto tiempo se almacenan los resultados en el dispositivo (nunca, duración de la sesión, permanente).

Como parte de la configuración del cliente, cuando una URL se establece el cliente crea un nuevo caché con RKRequestCacheStoragePolicyPermanently establecer la política de almacenamiento implica la limpieza de la caché de la sesión anterior y si el almacenamiento en caché está adaptado para la memoria caché permanente. Es esa compensación que está viendo en los mensajes de registro.

+0

Gracias por su respuesta. Acabo de intentar, y aún recibí el mensaje "restkit.support:RKCache.m:178 Invalidar el caché en la ruta:" –

+0

¿Es eso lo único que sugiere que es el almacenamiento en caché? ¿Ha intentado usar Charles u otro proxy de registro para ver qué le está pasando al servidor? – drewish

+0

He intentado el registro de proxy, nada va mal, recibí los datos esperados del servidor. De hecho, nada va mal en el comportamiento de la aplicación, mis datos son buenos, todo va según lo esperado. Pero, mi registrador sigue dándome esos mensajes "Invalidar el caché en la ruta: ....". Parece que restkit intenta eliminar el archivo existente de la memoria caché, pero no puede. Como dije, me preocupa que esas acciones no sean buenas para el rendimiento o la validación de Apple. –

Cuestiones relacionadas