【问题标题】:RestKit: Handling unexpected objectsRestKit:处理意外对象
【发布时间】:2014-04-03 08:38:36
【问题描述】:

我有一个映射,它需要一个特定路径的 NSDictionary,但我现在使用的 API 中有一个错误,因此当对象为空时它返回 NSArray 而不是 NSDictionary。我将如何优雅地处理这样的错误?

现在,RestKit 使用空的NSArray 并在映射的类对象上创建一个NSDictionary 对象,这个NSDictionary 有一个空数组的键,即打印dictionary.allKeys 给出:

<__NSArrayI 0xc953940>(
    <__NSArrayI 0xc94f610>(

    )
)

通常的样子:

<__NSArrayI 0xc953940>(
    stringKey1,
    stringKey2
)

然后发生的事情是 AFNetworking 崩溃,因为它试图将 sortedArrayUsingDescriptors: 发送到它所期望的字符串数组,但实际上是一个包含空数组的数组。

为什么会发生这种情况,我该如何处理?谢谢。

【问题讨论】:

    标签: ios objective-c json nsarray restkit


    【解决方案1】:

    确实需要查看异常消息和堆栈跟踪,但是,2 个可能的解决方案:

    1. 使用RKDynamicMapping 分析传入的对象并决定应该继续还是中止映射
    2. 在目标对象上使用 KVC 验证来验证映射的内容,如果无效则拒绝

    在每种情况下,它们的代码量可能大致相同,但代码位于不同的位置。选项 2 可能在您的例外之后,所以我最初会考虑选项 1。

    【讨论】:

    • 我觉得很奇怪我必须使用RKDynamicMapping 来分析传入的对象,因为那时我必须对每个传入的对象都这样做。我希望 RestKit 能够以某种方式对它知道不是它所期望的对象做出反应。
    • 一般情况下怎么办?服务器确实应该返回一个指示错误的响应代码以及每个请求的相同类型的数据到一个设置的路径。
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多