2

我刚刚开始为我正在构建的 iOS 应用程序试用 RestKit。我通常使用 ASIHttpRequest,但我想测试 RestKit 主要是因为它在 JSON 和 CoreData 之间的对象映射。RestKit 有一些很棒的东西,但我遇到了一个问题,它真的让人觉得它有缺陷,除非我做错了什么或错过了什么。我希望这里有人可以指导我。

我正在使用 RKObjectLoader 对 REST API 进行异步和同步调用。我的服务旨在发送回正确的 HTTP 状态代码以及某种描述,401 是 API 何时需要经过身份验证的用户的示例。

我的问题是,如果我收到 401 错误,RestKit 将停止正常运行。RKResponse 对象的状态码为 0,即使其中包含有效负载。我很确定这归结为 NSURLConnection 对 HTTP 状态的糟糕处理,但我希望 RestKit 能以某种方式解决这个问题。特别是因为 RKResponse 类有相当多的包装函数来确定响应的状态码(isOK、isCreated、isForbidden、isUnauthorized 等)。

相比之下,ASIHttpRequest 不使用 NSURLConnection,而是使用较低级别的 CFNetwork 代码。ASIHttpRequest 允许我准确地查看通过 HTTP 返回的内容,而不会左右发送错误。

问题是,我做错了什么,或者这是 RestKit 的预期行为?有没有人能够成功调用 [RKResponse isAuthenticated]?尽管对我来说尚无定论,但在这方面以异步和同步模式运行之间有什么区别。我确实在某处读到 NSURLConnection 在同步模式下运行会有所不同,即使底层代码只是调用异步操作。这是否与我使用 RKObjectLoader 而不仅仅是 RKRequest 有更多关系?可能负载无法映射到模型这一事实引起了愤怒,但似乎代码在 RKRequest.sendSynchronously 中更早地中断,在实际发生映射之前。

底线是我的代码需要能够自由读取 HTTP 状态代码。任何指导将不胜感激。

海德尔

4

2 回答 2

2

RestKit 0.20.x 的常用方法是继承 RKObjectRequestOperation。我写了一篇关于这个问题的博客文章,可以在这里找到:http: //blog.higgsboson.tk/2013/09/03/global-request-management-with-restkit/

于 2013-09-04T12:27:13.287 回答
0

请参阅http://groups.google.com/group/restkit/msg/839b84452f4b3e26

“......当身份验证失败时,身份验证质询被取消,这实际上使请求无效。”

更新:

RestKit 已经为此包含了一个委托方法:

(void)request:(RKRequest *)request didFailAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

之前触发

(void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error

当 HTTP Basic 身份验证失败时,我们可以使用它来代替。

于 2012-01-25T21:46:22.230 回答