2016-05-10 9 views
0

これは私のprevious questionsのフォローアップです。私はObjectMapperの助けを借りて、1ワードだけで構成されているRealmデータベースに配列typesをマッピングする必要がありました。レルムとオブジェクトマッパー:1つのアイテムの配列は、すべてのリクエストに対してレルムデータベースにスタッキングし続けます。

{ 
    "result": [ 
    { 
     "id": 20, 
     "types": [ 
     "now" 
     ], 
     "url": "/nl/whereto/ezrhgerigerg" 
    }, 

私は、以下の回避策だ、一部が働いた:

この

はJSONです

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) 
} 

とオブジェクトであるgetType()の私のクラス:

class getType: Object, Mappable { 
    dynamic var text: String? 

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

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

私が抱えている問題は、バックエンドへの呼び出しを行うたびに、データベースが更新されないということです型のデータを読み込んだり(または削除して新しいデータを取り込みます)、それを積み重ねていくだけです!これは、いくつかの呼び出しの後、10個のオブジェクトにしか存在しないうちに、getTypeデータベースを280+の行にしています。

バックエンドコールがx回発生すると、深刻な問題が発生します。誰が私が何をすべきか知っていますか?

答えて

1

おそらくPublicationオブジェクトを主キーを使用して更新したと思います。残念ながら、getTypeオブジェクトにはプライマリキーがありません。主キーで自動的に更新することはできません。

パブリケーションオブジェクトがすでに存在する場合は、typezプロパティを手動で削除することができます。次のように:、キャッチされない例外「RLMException」理由:

let publication = Mapper<Publication>().map(json) 
// ... 
try! realm.write { 
    // Check whether the Publication object already exists 
    let key = ... // Primary key value (e.g. 20) 
    if let publication = realm.objectForPrimaryKey(Publication.self, key: key) { 
     // If it already exists, delete `typez` objects 
     realm.delete(publication.typez) 
    } 

    realm.add(publication, update: true) 
} 
+0

次のエラーが返されます – SoundShock

+0

「の主キーのための 『』の値が無効です」ID @SoundShock申し訳ありませんが、それは私のせいです。 'key'パラメータは間違っています。主キーの値は '20'のように' key'パラメータに渡されます。私は私の答えを編集しました。 –

関連する問題