防止空 JSON 响应被映射 RestKit 0.22.0
Posted
技术标签:
【中文标题】防止空 JSON 响应被映射 RestKit 0.22.0【英文标题】:Preventing null JSON responses from being mapped RestKit 0.22.0 【发布时间】:2014-05-18 03:40:44 【问题描述】:我在将空 JSON 值映射到 Core Data 中的对象时遇到问题,这会导致错误。来自我的服务器的 GET 响应示例如下:
"status": "Success",
"result":
"users": [
"id": 240,
"username": "user",
"fullName": "My Name",
"profilePicture":
"id": 12,
"ownerID": "240",
"imageURL": "/photos/240/12",
,
"id": 241,
"username": "username",
"fullName": "Full Name",
"profilePicture": NULL
]
我已设置 RestKit 0.22.0 以将“profilePicture”的 JSON 值映射为 User
实体的关系(实体类型为 Photo
)。 profilePicture
关系对于 User
实体是可选的。当数据库返回 NULL 值(也就是用户没有设置个人资料图片)时,就会出现问题。 RestKit 将创建一个所有属性都等于 nil 的新 Photo
实体,并将其设置为 User
实体的 profilePicture
关系。这给我带来了很多问题。如何防止 NULL 值被映射?
我尝试设置userMapping.assignsNilForMissingRelationships = YES
,但这似乎不起作用。
编辑:我应该指出,当用户设置他们的个人资料图片时,一切都很好。只有当返回的 profilePicture 值为 NULL 时,我才会遇到问题。
更新:即使在更改 API 以在 NULL 时完全省略“profilePicture”键/值对后,RestKit 仍将 User
实体的 profilePicture
关系分配给 Photo
实体所有nil
属性。
【问题讨论】:
FWIW,现在 if(dict[@"profilePicture"]) 会给你你想要的结果,对吧? @JoeBlow 是的,除了映射由 RestKit 自动处理。 很公平。我有点在“RestKit 现在是多余的”阵营中,伙计! 我同意。如果这个项目的截止日期不是那么快,我会完全删除 RestKit 并使用 AFNetworking 自己处理所有映射。 RestKit 似乎变得太“聪明”了。 【参考方案1】:即使在更改 API 以在 NULL 时完全省略“profilePicture”键/值对后,RestKit 仍然将 User 实体的 profilePicture 关系分配给具有所有 nil 属性的 Photo 实体。
这应该是不可能的。如果密钥不在 JSON 中,RestKit 将不会做任何工作或填充关系。
在任何情况下,您都希望使用 KVC 验证来验证任何新创建的照片实体并在对象无效时中止处理。见discardsInvalidObjectsOnInsert
。
【讨论】:
即使在设置photoMapping.discardsInvalidObjectsOnInsert = YES;
之后,当响应包含空值/省略值时,我仍然会得到NSValidationErrorKey=photoID, NSLocalizedDescription=The operation couldn’t be completed. (Cocoa error 1570.)
。我更新了示例 JSON 响应以显示更准确的响应。以上是关于防止空 JSON 响应被映射 RestKit 0.22.0的主要内容,如果未能解决你的问题,请参考以下文章
restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)