2016-04-25 2 views
1

したがって、私はObjectMapperとRealmと一緒に使用している次のJSONを持っています。ObjectmapperはJSON内の1つの項目の配列を取得します

{ 
    "result": [ 
    { 
     "id": 20, 
     "types": [ 
     "now" 
     ], 
     "url": "/nl/whereto/ezrhgerigerg", 
     "categories": [ 
     { 
      "id": 39, 
      "name": "Food " 
     }, 
     { 
      "id": 21, 
      "name": "Varia" 
     } 
     ] 
    }, 

私の問題は、アレイ内のいくつかのアイテムは、「今」と言うか、「後で」、およびその他の項目(それゆえ、どの種類の項目が指定されていない)のために空である「タイプ」からデータを取得しています。

は、私は私のマッピングで次の操作を実行しようとした:

class Publication: Object, Mappable { 
    dynamic var id:Int = 0 
    var typez = List<getType>() 
    dynamic var url:String? 

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

    override static func primaryKey() -> String? { 
     return "id" 
    } 

    func mapping(map: Map) { 
     id <- map["id"] 
     typez <- map["types"] 
     url <- map["url"] 
    } 
} 

class getType: Object, Mappable { 
    dynamic var text: String = "" 


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

    func mapping(map: Map) { 
     text <- map[""] 
    } 
} 

私はレルムデータベースをチェックすると、あなたはそのtypez、作られた[のgetType]の配列を見ることができますが、それは(すべての項目に空のタイプが「今」であっても)。他の2つの項目(idとurl)がデータベースに書き込まれます。

私は間違ってデータベースに保存されません。

答えて

1

Listプロパティの割り当てを検出できないため、ListプロパティはObjective-Cタイプではありません。したがって、Listプロパティはletと宣言し、nilであってはなりません。 append /削除... /挿入... method to modifying theリスト `を使用する必要があります。

あなたが直接typezプロパティに値を割り当てるので、だからあなたのコード

typez <- map["types"] 

は、動作しません。

回避策は次のようである:

func mapping(map: Map) { 
    ... 
    var typez: [String]? = nil 
    typez <- map["types"] 

    typez?.forEach { t in 
     let obj = getType() 
     obj.text = t 
     self.typez.append(obj) 
    } 
    ... 

まず、ローカル変数にマッピングされた値を格納する(これは文字列配列です)。次に、文字列配列をオブジェクトに変換します。次にオブジェクトをListプロパティに追加します。

+0

小さな質問:このようにして、データベースからデータを更新すると(変更のバックエンドをチェックする)、前の情報にこの情報を積み重ねるだけです。 (私のdbのこの配列の場合のみ)。これが起こるのを止める方法はありますか? – SoundShock

+0

'mapping'関数は初期化と呼ばれるだけなので、発生しないと思います。しかし、それが起こるならば、解決策はループの前に 'typez'をクリアします。 'List'オブジェクトをクリアするには、' removeAll() 'を呼び出します。 –

+0

これは、リストからオブジェクトを削除しますが、データベースからは削除しません。私は更新されたデータでもう一度それを埋める前にリスト内の項目を最初に(そしてデータベース)削除したいと思います。 – SoundShock

関連する問題