RestKit:如何定义可选(嵌套)键路径
Posted
技术标签:
【中文标题】RestKit:如何定义可选(嵌套)键路径【英文标题】:RestKit: how to define optional (nested) keypaths 【发布时间】:2012-01-02 10:56:25 【问题描述】:我有一个类似 JSON 的结构
"objects":
"person":[
"id":"1",
"name":"my name"
"contacts":
"address":
"id":"1",
"street":"mystreet",
"country":"mycountry"
,
"email":
"id":"1",
"emailAddress":"hello@hello.com"
,
,
...
我正在尝试通过以下方式对其进行映射:
[personMapping mapKeyPath:@"contacts.address" toRelationship:@"address" withMapping:addressMapping];
只要存在联系人,此方法就可以正常工作。但是如果没有地址/电子邮件,则不会发送此元素,这会导致RKMappingOperation#applyRelationshipMappings
中的异常: value = [self.sourceObject valueForKeyPath:relationshipMapping.sourceKeyPath];
目前,我的解决方法是使用@try...@catch
,但我希望有更好的解决方案...
非常感谢!
编辑:如果根本没有发送联系人,则会发生异常;然后,JKDictionary 看起来像这样(再次在 RKMappingOperation#applyRelationshipMappings
中):
contacts = "";
name = myName;
id = 1;
...
【问题讨论】:
抛出的异常是什么?另外,您使用哪个 RestKit 版本? @mja: 0.9.3版,例外是[<__NSCFConstantString 0x3fe1bc> valueForUndefinedKey:]: this class is not key value coding-compliant for the key address.
我在我的一个基于 RestKit 的项目中尝试了类似的案例,我没有任何例外。不过,我使用来自 git,master 分支的最新 RestKit。请尝试以下操作(以检查您是否遇到相同的异常):将关系映射添加到不存在的键,例如。 “contacts.whatever”(保持所有映射不变)并解析包含地址和电子邮件的 JSON。
@mja 感谢您的评论;请看我的编辑...我认为我们的方式很好:)
我建议你尝试最新的 git/master 分支。
【参考方案1】:
也许您应该在实例化对象时正确初始化它们?也许从你所有的属性零开始;然后随着您填写属性;在您提交(或映射或其他)之前,检查您的属性值的数据完整性..
【讨论】:
以上是关于RestKit:如何定义可选(嵌套)键路径的主要内容,如果未能解决你的问题,请参考以下文章