2016-08-24 7 views
0

私は最後の2日間から問題があります。 JSONをレルムオブジェクトに変換することができません。Realm + Swift、ネストされたJSON

私は以下のようなJSONを持っている:

{ 
    "gender" : "male", 
    "id" : "123456789", 
    "age_range" : { 
    "min" : 21 
    }, 
    "last_name" : "LastName" 
} 

私はこのレルムモデルを持っている:

class UserObject: Object { 

    dynamic var userId: String = "" 
    dynamic var lastName: String? 
    dynamic var gender: String? 
    var ageRange = List<AgeRangeObject>() 

    required convenience init?(_ map: Map) { 
     self.init() 
    } 
} 

class AgeRangeObject: Object { 

    dynamic var min: Int = 0 
} 

そして私はJSONを解析するためにObjectMapperでこのモデルのインスタンスを作成しようとしています方法モデルインスタンスを作成します。

let userJSONModel = Mapper<User>().map(jsonString) 

    let realm = try! Realm() 

    do { 
     try realm.write { 

      let dict: [String : AnyObject] = [ 
       "userId" : (userJSONModel?.userId)!, 
       "ageRange" : (userJSONModel?.ageRange)!, 
       "lastName" : (userJSONModel?.lastName)!, 
       "gender" : (userJSONModel?.gender)! 
      ] 

      let userModel = UserObject(value: dict) 

      realm.add(userModel) 
     } 
    } catch { 
     print("Exception") 
    } 

この行に問題が発生しました。0私はstackoverflowの上で見ていた

*** Terminating app due to uncaught exception 'RLMException', reason: 'Invalid value 'min' to initialize object of type 'AgeRangeObject': missing key 'min'' 

私はfolowingエラーを取得する

Nested Arrays throwing error in realm.create(value: JSON) for Swift

How to convert Realm object to JSON with nested NSDate properties?

が、私の場合は異なっています。 あなたはその年齢層の辞書の問題点を知っていますか?なぜそれをうまく解析できないのですか? ありがとうございます。

答えて

2

JSONではageRangeは辞書ですが、UserObject.ageRangeプロパティはList<AgeRangeObject>です。あなたは不一致のモデルを持っています。

あなたはどちらかは、あなたのJSONの構造を反映するようにモデルを更新する必要があります。

var ageRange = List<AgeRangeObject>() 

は、モデルの構造を反映するようにJSONを更新し、

dynamic var ageRange: AgeRangeObject? = nil 

またはその逆になり:

{ 
    "gender" : "male", 
    "id" : "123456789", 
    "age_range" : [{ 
    "min" : 21 
    }], 
    "last_name" : "LastName" 
} 
+0

ありがとうございます! :)今私は啓発されています;)私はRealmのドキュメントはこのケースについては明確ではないと思います。 – PiotrCh