【问题标题】:5th consecutive RestKit call not being sent连续 5 次未发送 RestKit 调用
【发布时间】:2012-03-27 17:05:15
【问题描述】:

我正在通过 RestKit 发送 objectManager postObject 调用。在返回 403 的 4 次尝试之后,我的第 5 次尝试没有被 RestKit 拾取并发送出去。我已经使用 Charles 来观察我的实际流量验证了这一点,通过查看 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

但是,在我的第 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>

如你所见,没有Processing request log,没有Loading count log,将请求加入队列后什么都没有。有谁之前经历过这个吗?是否有一些内部计数器阻止 RestKit 再次进行此调用?我有一些技术不高的用户,他们的密码有问题,因此他们可能连续 4 次以上无法通过身份验证并非不可想象。

编辑: 经过更多研究后,RestKit 似乎在收到失败响应时并没有减少 objectLoader 中的 loadingCount 标志。不幸的是,我不确定我应该如何解决这个问题。是否像检查我的委托中的 403 并在找到时手动删除请求一样简单?

编辑 2: 好的,我可以通过在我的 objectLoader:didFailWithError: 委托方法中调用 RKRequestQueue cancelRequest: 来强制删除失败的请求。不确定这是否是正确的方法,但它有效。我希望 RestKit 在内部处理这个问题。

谢谢, 抢

【问题讨论】:

    标签: ios restkit


    【解决方案1】:

    也发生在我身上 我注意到我的 exec 很糟糕,所以我运行了 Xcode Profiling,我注意到我正在提前释放运行请求的对象

    妥善保存后解决

    【讨论】:

      【解决方案2】:

      我将我的解决方案放在对我的问题的编辑中,但为了让我在这里感到高兴,它再次出现在可接受的答案中。

      经过更多研究,RestKit 似乎并没有减少 objectLoader 收到失败响应时的 loadingCount 标志。 不幸的是,我不确定我应该如何解决这个问题。是否如 就像在我的委托中检查 403 并删除请求一样简单 如果我找到了手动?

      好的,我可以通过以下方式强制删除失败的请求 调用 RKRequestQueue cancelRequest: 在我的 objectLoader:didFailWithError: 委托方法。不确定这是不是 正确的方法,但它有效。我希望在内部使用 RestKit 处理了这个问题。

      【讨论】:

      • 你能详细说明一下吗?如果事情没有失败,RestKit 在哪里减少 objectLoader 中的 loadingCount 标志? (试图找出失败案例中缺少代码的地方)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多