RESTKIT:反序列化 JSON 与并非所有关系属性

Posted

技术标签:

【中文标题】RESTKIT:反序列化 JSON 与并非所有关系属性【英文标题】:RESTKIT : deserialize JSON with not all relationship attribute 【发布时间】:2015-04-09 21:59:51 【问题描述】:

我尝试像这样反序列化 JSON:

"id":1234, "content": "Hi, This is a message", "dateSaved":"10/04/2015 11:00", "user":"id":12

型号:

class Message: NSManagedObject 
    @NSManaged var content: String
    @NSManaged var dateSaved: NSDate
    @NSManaged var id: NSNumber
    @NSManaged var user: User


class User: NSManagedObject 
    @NSManaged var id: NSNumber
    @NSManaged var login: String
    @NSManaged var mobile: String
    @NSManaged var password: String
    @NSManaged var picture: NSData
    @NSManaged var messages: NSSet

用户已经保存在 ios 数据库中,所以我不需要从服务器发送它的所有数据。问题是RKRelationshipMappingRKConnectionDescription 似乎都不适用于这种工作:第一个工作是完整的对象,可以直接由CoreData 操作;第二个只能与标识符一起使用,不能与对象一起使用

我无法更改服务器将对象序列化为 JSON 的方式,因为其他 android 应用可以使用这种 JSON

有人知道如何解决这个问题吗?

【问题讨论】:

显示您的代码和模型并解释映射不起作用的原因 【参考方案1】:

好的,我想通了。我刚刚忘记为RKRelationshipMapping 设置方法addAttributeMappingsFromDictionary

let messageAttributesMapping = [
    "id":  "id",
    "content":  "content",
    "dateSaved":  "dateSaved"
]

extension Message 
    class func mappingResponse(managedObjectStore: RKManagedObjectStore) -> RKMapping 
        let messageMapping = RKEntityMapping(forEntityForName: "Message", inManagedObjectStore: managedObjectStore)

        messageMapping.identificationAttributes = ["id"]
        messageMapping.addAttributeMappingsFromDictionary(messageAttributesMapping)

        let userMapping = RKEntityMapping(forEntityForName: "User", inManagedObjectStore: managedObjectStore)
        userMapping.identificationAttributes = ["id"]
        userMapping.addAttributeMappingsFromDictionary(["id" : "id"])

        messageMapping.addPropertyMapping(RKRelationshipMapping(fromKeyPath: "user", toKeyPath: "user", withMapping: userMapping))

        return messageMapping
    

这个解决方案可以反序列化 JSON,但我仍然想知道是否应该尝试使用 RKConnectionDescription,这似乎是为我们只有 id 的关系而构建的?

【讨论】:

以上是关于RESTKIT:反序列化 JSON 与并非所有关系属性的主要内容,如果未能解决你的问题,请参考以下文章

Restkit 0.24.0:如何将对象(包括对多关系)序列化为 JSON

RestKit 2.0 - 将 json 数组映射到实体关系会丢失数组序列

RestKit 0.2 映射 Core Data <--> JSON 与一对多关系

RestKit 自定义序列化

RestKit .22:无法成功映射与嵌套 JSON 的关系

Restkit:来自 JSON parentId 的映射关系