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
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