连续第五次RestKit呼叫未被发送
我通过RestKit发送一个objectManager postObject调用。 在4次尝试返回403之后,我的第5次尝试没有被拾起并由RestKit发送出去。 我已经使用Charlesvalidation了这一点,观察我的实际stream量,并通过查看RestKit日志,RestKit获取我的请求并将其放入RequestQueue中,但是它永远不会被取消。
我的前4个请求看起来像这样在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
但是,在我的第五个电话会发生这种情况
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>
正如你所看到的,没有处理请求日志,没有加载计数日志,在将请求添加到队列后没有任何东西。 有谁之前经历过这个吗? 是否有一些内部计数器阻止RestKit再次进行此调用? 我有一些用户不是技术性很强的,并且有密码方面的问题,所以不可能连续4次validation。
编辑:经过更多的研究,似乎RestKit不是递减的objectLoader中的loadingCount标志,当它得到一个失败的响应。 不幸的是,我不知道如何去解决这个问题。 是否像在我的代理中检查403一样简单,如果我find它,手动删除请求?
编辑2:好吧,我能够通过调用RKRequestQueue cancelRequest:在我的objectLoader:didFailWithError:委托方法强制删除失败的请求。 不知道这是否是正确的方式,但它的作品。 我期望RestKit内部处理这个问题。
谢谢,罗布
对我也发生了我也注意到我得到了糟糕的执行,所以我运行Xcode分析,我注意到我发布的对象运行的请求早
妥善保存后解决
我把我的解决scheme放在编辑我的问题上,但是为了使这里的工作开心,这又是一个被接受的答案。
经过更多的研究,看来RestKit不会在objectLoader中的loadingCount标志递减时收到失败的响应。 不幸的是,我不知道如何去解决这个问题。 是否像在我的代理中检查403一样简单,如果我find它,手动删除请求?
好吧,我能够通过调用RKRequestQueue cancelRequest强制移除失败的请求:在我的objectLoader:didFailWithError:委托方法。 不知道这是否是正确的方式,但它的作品。 我期望RestKit内部处理这个问题。