テックキャンプ168日目〜Realmに保存したデータを編集

kobasaです(´ω`*)
今回はRealmに保存したデータの編集方法をミニアプリで試していました。

指定のidの値のみ読み込むフィルターを設定して、
値を編集したときにフィルター通り読み込まれるように実装していました。
まずはフィルターを設定するコードから。

    @IBOutlet weak var table: UITableView!    
    var tableCells: Results<Coupon>!

    override func viewDidLoad() {
        super.viewDidLoad()
        table.delegate = self
        table.dataSource = self
        let realm = try! Realm()
        
        // idが1(初期値)のデータのみ取得するよう設定
        self.tableCells = realm.objects(Coupon.self).filter("id == 1")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.table.reloadData()
    }

これでidが1のデータしかテーブルに表示されません。登録時にidが1になるよう他で設定済。
次は表示されたセルをタップするとidが2に編集されるコードです。

    //任意のセルがタップされた時に呼ばれるメソッド
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let realm = try! Realm()
        
        // 更新対象を取得
        let tmpCell: Coupon = self.tableCells[(indexPath as NSIndexPath).row]
        
        // タップしたセルのidの値を2に編集してデータを更新
        try! realm.write ({
          tmpCell.id = 2
        })
        
        self.table.reloadData()
    }

他のページでidが2のデータのみ表示されるよう設定するときちんと表示されました。
またセルをタップするとidが1になる設定をすると最初のページに再表示されました。
オリジナルアプリにも上手く反映させたいです。

最後に少し気になったことをメモ。
・ストーリーボードで作業してプッシュするとコンフリクトが起きる?
・GitHub Desktopで変更内容を取り消す方法
→取り消したいファイルにチェックを入れ「○ Change」と表示されている部分で「control + クリック」
「Discard Changes…」を選択して取り消し

Xcodeの仕様が良くわかってない(´・ω・`)
ブレークポイントの履歴が自動で書き込まれているぽい?
余計なファイルをコミットしたり、必要な記述をコンフリクト時に消してそうで怪しいですね。

コメント

タイトルとURLをコピーしました