59947


普通に追加すると、既に主キーが存在している場合はエラーでクラッシュします。  
以下のように、追加する前に既に存在するかチェックするようにしてみましたが、何か違うような気がします。

[code]

    // id(主キー)が5のDogが存在しなければ追加し、存在すれば何もしない
    let dogs = realm.objects(Dog.self).filter("id == 5")
    if dogs.count == 0 {
        realm.add(newDog)
    }
    
[/code]

初歩的な質問ですがよろしくお願いいたします。


CC BY-SA 4.0
2019-10-24T18:02:52.663
59946
2019-10-24T21:30:52.463
23029
question
swift realm
Realm Swiftで主キーが存在しない場合のみ追加し、存在している場合は一切何もしない方法はありますか。


考え方はそれで合っています。Realmには同じプライマリキーを持つオブジェクトがある場合は新しいデータで「更新」するというAPIは用意されています（`add(_,
update:)`）が、古いデータの方を残すというAPIはありません。

（もし目的がそっちなら

[code]

    realm.add(newDog, update: true)
    
[/code]

と書くと古いオブジェクトを自動的に更新してくれます。）

なので、すでにオブジェクトが存在するかどうかをチェックして、存在する場合は何もしない、という処理を書きます。

ただし、プライマリキーを設定しているのに`filter()`で検索する必要はありません。  
プライマリキーがあるオブジェクトでキーが分かっているなら、`object(ofType:forPrimaryKey:)`でプライマリキーを使ってオブジェクトを取得できます。

[code]

    if realm.object(ofType: Dog.self, forPrimaryKey: 5) == nil {
       realm.add(newDog)
    }
    
[/code]


CC BY-SA 4.0
2019-10-24T21:30:52.463
59947
2019-10-24T21:30:52.463
5519
59946
answer