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