2012-03-27 10 views
1

私はRestKitを通じてobjectManager postObject呼び出しを送信しています。 403を返す4回の試行の後、私の5回目の試行は、RestKitによってピックアップされずに送信されます。私はチャールズを使って私の実際のトラフィックを監視し、RestKitログを見直すことで、RestKitが私の要求を受け取り、それをRequestQueueに入れています。5回目のRestKitコールが送信されない

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 

しかし、私の第5回の呼び出しでこの問題が発生した:

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> 

することができますように

私の最初の4つの要求

は、(ログの壁のために謝罪を)RestKitログに次のようになり参照、no処理要求ログ、noローディングカウントログ、要求をキューに追加した後は何もありません。誰もこれを経験したことがありますか? RestKitがこの呼び出しをやり直すのを防ぐ内部カウンタがありますか?私は非常に技術的でなく、パスワードに問題があるユーザーがいるので、4回以上連続して認証に失敗する可能性はありません。

EDIT:は、より多くの研究の後、それが失敗した応答を取得する際RestKitがobjectLoaderにloadingCountフラグをデクリメントされていないことが表示されます 。残念ながら、私はこれを修正するためにどのようにすべきか分かりません。デリゲートの403をチェックし、見つけたら手動でリクエストを削除するのは簡単ですか?

EDIT 2: [OK]を、私はRKRequestQueue cancelRequestを呼び出すことによって、失敗した要求の削除を強制することができました。私のobjectLoaderに:didFailWithError:デリゲートメソッドを。これが正しい方法であるかどうかはわかりませんが、正しく動作します。私は、RestKitがこの問題を内部的に処理したと考えています。

おかげで、 ロブ

答えて

0

私の解決策を私の質問に編集しましたが、ここでは満足してもらえるよう、ここで再び受け入れられます。

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

これについて少し詳しく説明できますか?物事が失敗しない場合、RestKitはobjectLoaderのloadingCountフラグをどこで減らしますか? (フェイル・ケースでコードがどこにないか把握しようとする) – toucan

0

は私が悪いのexecを持って気づいた も私に起こったので、私はXcodeのプロファイリングを実行し、私はそれを保持した後、早期

にリクエストを実行しているオブジェクトを解放して気づきました正常に解決されました

関連する問題