RESTKIT:反序列化 JSON 并非所有关系属性
RESTKIT : deserialize JSON with not all relationship attribute
我试过像这样反序列化 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数据库中,所以我不需要从服务器发送它的所有数据。问题是 RKRelationshipMapping
和 RKConnectionDescription
似乎都没有为这种作品做:第一个作品是完整的对象,可以直接由 CoreData 操作;第二个只能与标识符一起使用,不能与对象一起使用
我无法将服务器序列化对象的方式更改为 JSON,因为另一个 Android 应用程序使用这种 JSON
有人知道如何解决这个问题吗?
好的,我明白了。我刚刚忘记为 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 的关系构建的?
我试过像这样反序列化 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数据库中,所以我不需要从服务器发送它的所有数据。问题是 RKRelationshipMapping
和 RKConnectionDescription
似乎都没有为这种作品做:第一个作品是完整的对象,可以直接由 CoreData 操作;第二个只能与标识符一起使用,不能与对象一起使用
我无法将服务器序列化对象的方式更改为 JSON,因为另一个 Android 应用程序使用这种 JSON
有人知道如何解决这个问题吗?
好的,我明白了。我刚刚忘记为 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 的关系构建的?