こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。
UINavigationControllerの戻るボタンを押したタイミングでRealmにデータを保存するを紹介します。
アプリの画面構成
Apple純正のNoteアプリのように、一覧画面のセルをタップするとメモの詳細が表示され、戻るボタンを押したタイミングでデータの更新処理を実施したい。
UINavigationControllerの戻るボタンのイベントでRealmにデータを保存する方法
詳細画面からNavigationの戻るボタンのイベントでRealmに保存をしています。
extension DetailViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if viewController is HomeViewController {
let realm = try! Realm()
let model = MemoModel()
try! realm.write {
realm.add(model, update: .all)
}
}
}
}
困ったポイント
上のコードで一覧画面に戻った際にviewWillAppear(_ animated: )でRealmからデータを取得し、UITableViewに紐付いたArrayに代入後、UITableView.reloadData()で更新をかけました。
しかい、UITableViewの値が更新されていない!!
調べたところviewWillAppear(_ animated: )でRealmからデータを取得した時点では、まだ戻るボタンのイベントで登録したデータが反映されていませんでした。
解決方法
Realmからのデータ取得とUITableView.reloadData()を呼ぶタイミングをviewDidAppear(_ animated: )へ変更することで解決できました。
コメント