30123


今Swiftを使い、ボタンをタップした時の回数をカウントしてRealmに保存する作業を行っています  
保存はできるのですが、タップされた回数がただ追加されるだけで、上書き方法がわかりません  
タップするたびに値が更新されるようにするにはどうしたらいいのでしょうか？  
更新のコードをサイトで見て色々試行錯誤したのですがどれもエラーになってしまい、結局追加されるだけのコードになってしまいます  
考え方？ヒントを教えていただきたいです。

[code]

      var countNum = 0
    
    @IBAction func counter(sender: AnyObject) {
    
        countNum++
        var count2 = count1()
        count2.counter = countNum
    
       //  Realmのインスタンスを取得
        let realm = try! Realm()
    
        // データを追加
        try! realm.write() {
            realm.add(count2)
        }
            }
    
[/code]


CC BY-SA 3.0
2016-11-05T01:30:38.783
30111
2016-11-05T12:07:47.070
2016-11-05T11:51:50.627
5519
19435
question
swift realm
Realmの値を上書きしたい


このコードですと、`counter()`メソッドが呼ばれるたびに新しくオブジェクトを作成して（`var count2 =
count1()`）、Realmに追加する（realm.add(count2)）という処理になっています。

毎回、新しくデータが追加されるのはそのためです。

すでにRealmに保存されているデータを更新するには、

  1. Realmから更新したいオブジェクトを取得する
  2. 1で取得したオブジェクトのプロパティを変更する

という手順になります。

Realmに保存されているオブジェクトを取得するには下記のようにします。

[code]

    let realm = try! Realm()
    let resutls = realm.objects(Counter.self)
    // ^ モデルクラス名がわからないので適当に書きました。
    // Counter.selfの部分は実際のモデルクラスに置き換えてください
    
[/code]

もし、複数のオブジェクトが保存されている場合は、条件を指定してオブジェクトを限定します。

[code]

    let resutls = realm.objects(Counter.self)
                       .filter("...") // "..."の部分は検索条件が入ります。
    
[/code]

または、プライマリキーを使っているなら、プライマリキーを指定してオブジェクトを取得できます。

[code]

    let counter = realm.object(ofType: Counter.self, forPrimaryKey: "...")
    
[/code]

オブジェクトを取得できたら、トランザクションを使ってオブジェクトのプロパティを更新します。

[code]

    try! realm.write {
        counter.counter = newValue
    }
    
[/code]


CC BY-SA 3.0
2016-11-05T12:07:47.070
30123
2016-11-05T12:07:47.070
5519
30111
answer