どうも、松山事務所の釣りバカ石丸です。
前回作ったシンプルメモアプリは、アプリを終了するとメモした内容を忘れてしまうという残念なアプリだったので、今回はアプリを終了してもメモの内容を忘れないようにしたいと思います。
開発環境はOS X Yosemite(ver10.10.5)、Xcode(ver7.0.1)になります。
下準備
今回は前回作ったアプリをベースに機能追加を行うので、こちらから前回作ったシンプルメモアプリのソースをダウンロードして下さい。
[wpdm_package id=’6271′]
ダウンロードしたアーカイブを解凍して、memo.xcodeproj をXcode で開いたら ViewController.swift を表示して準備完了です。
仕様検討
画面表示時に前回のメモの内容を表示するのは良いとして、いつメモの内容を保存するべきか。
僕の場合、Windows アプリだったらアプリ終了時に保存するように作るのですが、スマホアプリって「アプリを終了するぞ!」って明確なタイミングがない気がします。
ホーム画面でホームボタンを押すと起動しているアプリ一覧が表示されますよね。使っていないアプリが起動していると気になるので、ちょくちょくスワイプしてアプリを落としていますが、PCで言うところのアプリを強制終了させているような感覚でいます。
ですので、今回はメモを確定したタイミングで保存するようにしたいと思います。
コーディング1 メモの保存
まずは入力されたメモを保存するところ。
確定ボタン、またはTextFieldで return(改行) された時に呼ばれて、入力されたメモをメモ一覧に反映する処理をするメソッドに、メモを保存する処理を追加します。
func applyMemo() { if editMemoField.text == nil { return } if editRow == unselectedRow { memoList.append(editMemoField.text!) } else { memoList[editRow] = editMemoField.text! } let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject(memoList, forKey: "MEMO_LIST") editMemoField.text = "" editRow = unselectedRow memoListView.reloadData() }
追加したのは12、13行目。 NSUserDefaults という領域に “MEMO_LIST” という名前をつけて、入力されているメモ一覧(String配列)を、全てまるっと保存しています。
コーディング2 メモの読み込み
次は保存しておいたメモ一覧を読み出すところ。
画面が表示された時に一度だけ呼び出されるメソッドに、保存しておいたメモを読み出す処理を追加します。
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. memoListView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell") editMemoField.becomeFirstResponder() let defaults = NSUserDefaults.standardUserDefaults() let loadedMemoList = defaults.objectForKey("MEMO_LIST") if (loadedMemoList as? [String] != nil) { memoList = loadedMemoList as! [String] } }
追加したのは7〜11行目。保存する時につけた “MEMO_LIST” という名前でメモを読み出します。
アプリを初めて使うときには保存されたメモがないので、メモが読み出せたかどうかチェックして、読み込めた場合はメンバ変数に読み出したメモを設定しています。
実行
初回起動時は前回入力したメモがないのでカラッポのリストが表示されます。
好きなメモを入力していくと、このタイミングでメモの内容が保存されていってるはず。
アプリを再起動!
入力した内容を思い出して表示してくれていますね。
今回使用した NSUserDefaults 以外にも、オブジェクトアーカイブ、プロパティリスト、CoreData といったデータの保存方法があるらしいのですが、アプリの設定とかを覚えておく NSUserDefaults が一番簡単で使用頻度も高いそうです。
2011年の記事になりますが、こちらに詳しくわかりやすくまとまっています。
※ iOS でデータを永続化する方法
http://d.hatena.ne.jp/glass-_-onion/20110904/1315142404
今回はここまで。
ありがとうございました。