2012-03-27 10 views
1

Ich sende einen ObjectManager-postObject-Aufruf über RestKit. Nach 4 Versuchen, die 403 zurückgeben, wird mein 5. Versuch nicht aufgenommen und von RestKit verschickt. Ich habe dies mithilfe von Charles überprüft, um meine tatsächlichen Zugriffe zu überwachen, und durch Überprüfen der RestKit-Protokolle erhält RestKit meine Anfrage und legt sie in die RequestQueue, aber sie wird nie wieder zurückgenommen.5. Kontinuierlicher RestKit-Anruf wird nicht gesendet

Meine erste 4-Anfragen wie folgt aussehen in den RestKit logs (Entschuldigung für die Wand log):

D restkit:RKObjectManager.m:171 CacheTimeoutSet: 60.000000 - 60.000000 
T restkit.network.queue:RKRequestQueue.m:226 Request <RKObjectLoader: 0x784ac90> added to queue <RKRequestQueue: 0x6501530> 
T restkit.network.queue:RKRequestQueue.m:173 Processing request <RKObjectLoader: 0x784ac90> in queue <RKRequestQueue: 0x6501530> 
T restkit.network.queue:RKRequestQueue.m:104 Loading count increasing from 0 to 1. Firing requestQueueDidBeginLoading 
T restkit.network.queue:RKRequestQueue.m:131 Loading count set to 1 for queue <RKRequestQueue: 0x6501530> 
T restkit.network.cache:RKRequestCache.m:106 Found cachePath '<REMOVED>' for <RKObjectLoader: 0x784ac90> 
T restkit.network.cache:RKRequestCache.m:123 Determined hasResponseForRequest: <RKObjectLoader: 0x784ac90> => NO 
D restkit.network:RKRequest.m:255 Sending asynchronous POST request to URL <REMOVED>. 
D restkit.network:RKObjectLoader.m:295 POST or PUT request for source object <TSLAuthenticationContract: 0x7849b30> 
    Username:<REMOVED> 
    Campus:<REMOVED>, serializing to MIME Type application/json for transport... 
D restkit.object_mapping:RKObjectMappingOperation.m:391 Starting mapping operation... 
T restkit.object_mapping:RKObjectMappingOperation.m:231 Mapping attribute value keyPath 'username' to 'Username' 
T restkit.object_mapping:RKObjectMappingOperation.m:241 Mapped attribute value from keyPath 'username' to 'Username'. Value: <REMOVED> 
T restkit.object_mapping:RKObjectMappingOperation.m:231 Mapping attribute value keyPath 'password' to 'Password' 
T restkit.object_mapping:RKObjectMappingOperation.m:241 Mapped attribute value from keyPath 'password' to 'Password'. Value: <REMOVED> 
T restkit.object_mapping:RKObjectMappingOperation.m:231 Mapping attribute value keyPath 'campusName' to 'CampusName' 
T restkit.object_mapping:RKObjectMappingOperation.m:241 Mapped attribute value from keyPath 'campusName' to 'CampusName'. Value: <REMOVED> 
D restkit.object_mapping:RKObjectMappingOperation.m:397 Finished mapping operation successfully... 
T restkit.network.cache:RKRequestCache.m:106 Found cachePath '<REMOVED>' for <RKObjectLoader: 0x784ac90> 
D restkit.network.cache:RKRequestCache.m:220 Read nil cached headers from cachePath '<REMOVED>' for '<RKObjectLoader: 0x784ac90>' 
D restkit.network.cache:RKRequestCache.m:245 Found cached ETag '(null)' for '<RKObjectLoader: 0x784ac90>' 
T restkit.network:RKRequest.m:209 Prepared POST URLRequest '<NSMutableURLRequest <REMOVED>>'. HTTP Headers: <REMOVED>. 
D restkit.network.queue:RKRequestQueue.m:180 Sent request <RKObjectLoader: 0x784ac90> from queue <RKRequestQueue: 0x6501530>. Loading count = 1 of 4 
T restkit.network.queue:RKRequestQueue.m:142 Timer initialized with delay 0.300000 for queue <RKRequestQueue: 0x6501530> 
<REMOVED - Multiple Timer messages> 
T restkit.network.queue:RKRequestQueue.m:142 Timer initialized with delay 0.300000 for queue <RKRequestQueue: 0x6501530> 
D restkit.network:RKResponse.m:105 NSHTTPURLResponse Status Code: 403 

jedoch auf meinem fünften Aufruf dies geschieht:

D restkit:RKObjectManager.m:171 CacheTimeoutSet: 60.000000 - 60.000000 
T restkit.network.queue:RKRequestQueue.m:226 Request <RKObjectLoader: 0x782a370> added to queue <RKRequestQueue: 0x6501530> 
T restkit.network.queue:RKRequestQueue.m:142 Timer initialized with delay 0.300000 for queue <RKRequestQueue: 0x6501530> 
<REMOVED - Multiple Timer messages> 
T restkit.network.queue:RKRequestQueue.m:142 Timer initialized with delay 0.300000 for queue <RKRequestQueue: 0x6501530> 

Wie Sie können siehe, kein Protokoll der Verarbeitungsanforderung, kein Ladezählprotokoll, nichts nach dem Hinzufügen der Anforderung zur Warteschlange. Hat das schon mal jemand erlebt? Gibt es einen internen Zähler, der verhindert, dass RestKit diesen Anruf erneut tätigt? Ich habe Benutzer, die nicht sehr technisch sind und Probleme mit ihren Passwörtern haben, und so ist es nicht undenkbar, dass sie sich nicht mehr als 4 Mal in Folge authentifizieren können.

EDIT: Nach mehr Forschung scheint es, dass RestKit nicht dekrementiert die loadingCount Fahne im Object, wenn es eine ausgefallene Antwort bekommt. Leider bin ich mir nicht sicher, wie ich das beheben sollte. Ist es so einfach, wie nach dem 403 in meinem Delegaten zu suchen und die Anfrage manuell zu entfernen, wenn ich sie finde?

EDIT 2: Ok, ich war in der Lage die Entfernung des ausgefallenen Wunsch zu zwingen, durch RKRequestQueue CancelRequest Aufruf: in meinem Object: didFailWithError: Delegatmethode. Nicht sicher, ob dies der richtige Weg ist, aber es funktioniert. Ich würde erwarten, dass RestKit dieses Problem intern behandelt.

Danke, Rob

Antwort

0

Ich habe meine Lösung in Bearbeitungen zu meiner Frage, aber um SO glücklich zu machen hier ist es wieder in einer akzeptierten Antwort.

After more research it appears that RestKit isn't decrementing the loadingCount flag in the objectLoader when it gets a failed response. Unfortunately I'm not sure how I should go about fixing this. Is it as simple as checking for the 403 in my delegate and removing the request manually if I find it?

Ok, I was able to force the removal of the failed request by calling RKRequestQueue cancelRequest: in my objectLoader:didFailWithError: delegate method. Not sure if this is the correct way, but it works. I would expect that RestKit internally handled this issue.

+0

Können Sie ein wenig darauf eingehen? Wo dekrementiert RestKit das loadingCount-Flag im objectLoader, wenn die Dinge nicht fehlschlagen? (versucht herauszufinden, wo im Fail-Case Code fehlt) – toucan

0

mir passiert auch ich bemerkte ich schlecht exec bekam, so dass ich die Xcode Profilieren laufen und ich bemerkte ich, das Objekt wurde die Freigabe der Anfrage zu früh

nachdem es Halte läuft richtig gelöst wurde

Verwandte Themen