2015-10-07 12 views
0

我想在嵌套的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 
    } 
} 

回答

1

您将需要设置你的映射相同的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+JSONDecodable

+0

我可以设置钥匙。感谢您的建议! – naohide

相关问题