2016-11-18 8 views
0

を無視私の主な質問は:

は、モデルが新しいから作成されているときにのみ使用されているレルムモデルのデフォルト値を指定する方法はあります、レルムが自動的にrealm.add(thing, update: true)コールここでレルムは、更新してオブジェクトを追加 - 欠損値に



からモデルを更新コンテキストのためのいくつかの情報だときには

は私がアルを引っ張る輸入スクリプトを持っている...無視されますAPIからのデータの大部分を領域にインポートします。

let thing = SomeThing(value: [ 
    "id" : jsonData["id"].int!, 
    "title" : jsonData["title"].string!, 
    "system" : system 
]) 

try! realm.write { 
    realm.add(thing, update: true) 
} 

と私SomeThingモデルは、次のようになります:すべてのループを無視し、relavantない構造を入れ子に、私は基本的にこれを持って

class SomeThing : Object { 

    dynamic var id = 0 
    dynamic var title = "" 
    dynamic var system : System? 

    dynamic var favourited = false 

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

favouritedブールは、APIによって提供されていませんユーザーがオブジェクトをお気に入りにすると更新されます。しかし、モデルのデフォルトはfalseであるため、レルムが存在することが判明した場合は、favouritedfalseに戻して値を更新します。

私が知っているのは、領域からオブジェクトを引っ張って自分自身(それが存在すれば)を更新するので、私は手作業で何が更新されるのかを制御できます。物事の100年代または1000年代になるので、私はむしろこの1つの問題のためだけにオブジェクトを引き出すのをやめようと思います。

答えて

2

からより多くが、私は何が必要でしょうtrueに設定された更新パラメータを持つrealm.createことがわかりました。

私の質問の方法を使用すると、レルムは既存のオブジェクトと新しいオブジェクトを交差させ、両方に存在するパラメータを更新します。オブジェクトを初期化するときにfavouritedパラメータが作成されるため、レルムはこれを変更(これは私がすでに知っていた)と見なします。

ただし、代わりにrealm.createを使用して、変更する値だけを渡すことができます。これは基本的に新しいオブジェクトの交差をスキップし(存在しないため)、渡す値のみを挿入(または更新)します。

ので、この:

let thing = Something(value: [...whatever...]) 
try! realm.write { 
    realm.add(thing, update:true) 
} 

は次のようになります。

try! realm.write { 
    let thing = realm.create(Something.self, value: [...whatever...], update: true) 
} 

注:レルムアップデートの技術的な実装は、いくつかのオブジェクトは、差分のか交差するよりもはるかに より複雑であることを確認イム。説明 は、問題と解決策を理解するためにのみ提供されており、実際の動作方法を文書化したものではありません。

0

あなたのサーバーから値を得、その後、idと一致した保存SomeThingをフェッチ、それはtitleとidとともにsystemだあなたはfavouritedを維持することができるこの方法を更新するためにループを行い、これが唯一であります私は思う、私はあなたが言及したことをとにかくあるとは思わない。

さらに、新しいオブジェクトを作成していて、すでにレルム内にあるオブジェクトで更新しようとすると、エラーが発生する原因になります。レルムオブジェクトはこれらのプロパティが含まれているだけでなくので、あなたは宣言しますが、そのスーパークラスと同じ状況にそれらのため

+0

ありがとうございます。プライマリキーを使用するので、オブジェクトを追加するためにrealmに指示するときに、プライマリキーが存在する場合はそれを代わりに更新します。私は遅いものを(想像してみる)最初にデータベースからオブジェクトを引き抜くのを避けようとしていました。私は 'realm.create'がそれを解決することを発見しました! – TRG

関連する問題