如何使用RKObjectMapping在嵌套的RLMObject中设置相同的主键?
问题描述:
我想在嵌套的RLMObject中设置相同的主键。
如何设置与RKObjectMapping相同的ID?如何使用RKObjectMapping在嵌套的RLMObject中设置相同的主键?
首先,我做了下面的json文件。
JSON文件
{
"id": 1
"obj2": {
"name": "name1"
}
}
其次,我提出以下迅速的类文件。
类文件
class Obj2: RLMObject {
dynamic var id: Int <-- I want to set same id as Obj1.id
dynamic var name: String!
override class func primaryKey() -> String {
return "id"
}
class func responseMapping() -> RKObjectMapping {
let objectMapping = RKObjectMapping(forClass: self)
objectMapping.addAttributeMappingsFromDictionary([
"name": "name"
return objectMapping
}
}
class Obj1: RLMObject {
dynamic var id: Int!
dynamic var obj2: Obj2?
override class func primaryKey() -> String {
return "id"
}
class func responseMapping() -> RKObjectMapping {
let objectMapping = RKObjectMapping(forClass: self)
objectMapping.addAttributeMappingsFromDictionary([
"id": "id"
objectMapping.addPropertyMappingsFromArray([
RKRelationshipMapping(fromKeyPath: "obj2", toKeyPath: "obj2", withMapping: Obj2.responseMapping())
])
return objectMapping
}
}
答
您将需要设置你的映射相同的JSON对象的基础上,而不是遍历范围,这将使依赖关系的映射。
class Obj2: RLMObject {
dynamic var id: Int
dynamic var name: String!
override class func primaryKey() -> String {
return "id"
}
class func responseMappingForBeingOwnedByObj1() -> RKObjectMapping {
let objectMapping = RKObjectMapping(forClass: self)
objectMapping.addAttributeMappingsFromDictionary([
"id": "id",
"name": "obj2.name"
])
return objectMapping
}
}
class Obj1: RLMObject {
dynamic var id: Int!
dynamic var obj2: Obj2?
override class func primaryKey() -> String {
return "id"
}
class func responseMapping() -> RKObjectMapping {
let objectMapping = RKObjectMapping(forClass: self)
objectMapping.addAttributeMappingsFromDictionary([
"id": "id"
])
objectMapping.addPropertyMappingsFromArray([
RKRelationshipMapping(fromKeyPath: ".", toKeyPath: "obj2", withMapping: Obj2.responseMappingForBeingOwnedByObj1())
])
return objectMapping
}
}
警告的一些遗言:RestKit在这一点上并不真正支持Realm。因此,您现在可能会更好地使用别的东西,例如Realm对解码对象表示的内置支持有限,Realm+JSON或Decodable。
我可以设置钥匙。感谢您的建议! – naohide