経過時間を記録するアプリ
時間を記録して、直近の記録からの経過時間を表示するiPhoneアプリを作りました。
MMOなどで、一度取得すると一定時間取得できなくなるアイテムがあったりしまして、その把握を簡単にするのが目的です。
開発中にひっかかったとろなどを記録します。
完成図
アプリを起動すると、直近の記録と経過時間が表示されます。
画面1
「履歴を見る」、から一覧で参照することができ、削除もできます。
画面2
画面3
TableView with Storyboard
UIをStoryboardを使用して作成することにしたのですが、UIが反映されないという問題にハマりました。
- XCodeでEmpty Applicationテンプレートから作成する。
- UIをStoryboardで作成することにしたので、プロジェクトに新規のStoryboardを追加する。
- TableViewを使用するので、Object libraryから、Table View Controllerを貼り付ける。
- TableViewの挙動を書き換えるため、UITableViewControllerを継承したクラスを作成し、プロパティCustom Classに指定する。
- そのまま実行してみると、画面は真っ白のままです。
- AppDelegate.didFinishLaunchingWithOptionsを変更して、Storyboardで指定した、Custom ClassからUIViewを作成して、windowに追加する。(←ここで間違った!
- 空っぽのTableViewが表示されました。(←ここで騙された!
- TableViewの項目に、セルの番号(indexPath.row)を設定するように変更する。
- 空っぽのTableViewが表示されました。おかしいぞ…
プロジェクトテンプレートをSingle View Applicationとすれば、テンプレートに含まれるStoryboardを使用するようにプロジェクトが設定されています。
Storyboardを使用するようにするために、以下のようにしました。
- AppDelegate.didFinishLaunchingWithOptionsを変更して、以下の内容のみとする。
return YES;
- Project Navigatorのルートを選択して、Targets > [Application Name] > General > Deployment Info > MainInterface に、作成したStoryboardを指定する。
Core Data
日時の記録は、Core Dataを使用して保存することにしました。
Core Dataの基本的な使い方を調べて、CRUDを実装しようとしました。 このときの、Core Dataの使い方はこんなイメージです。
Core Dataのしくみ、使い方は、以下のページを参考にしました。
その後、TableViewとCore Dataの連携はもっと簡単になるよ、ってことでキーワード NSFetchedResultController で調べました。
参考にしたのは、以下のページです。
- NSFetchedResultsController Class Reference (Apple)
- しょーもないPGの作業メモ:CoreDataメモをかね簡易たチュートリアル5(1対1のモデル)-追加・削除・controller
- Cocoaの日々: NSFetchedResultsController のおさらい
NSFetchedResultController と NSFetchedResultsControllerDelegate を使うと、一覧上での削除はずいぶんと簡単になりそうです。差分だけ更新が可能になるので。 画面を表示するたびに、データを取得しなおして、再表示という手間はなくなりました。
ただし、完全になくなったというわけではなく、画面1では、viewDidAppearにて、画面の更新をしています。一覧で最新のレコード(画面1で表示しているデータ)が削除された場合に、画面が戻ってきてから、表示更新までにラグが発生することがあるためです。
Core Dataの使い方は、こうなります。 NSFetchedResultControllerは、各画面ごとに取得・保持しています。
ソースコード
コードはgithub.comで公開しています。 実際のコードを確認する方はこちらからどうぞ。
はじめまして
明けましておめでとうございます。 年も改まり、開発関連のブログを別立てすることにしました。
もともとは、水無月の余韻 ブログです。 今後は、開発関連の記事は、こちらのブログに記載していきます。
開発関連といっても、日々のプログラミングなどで調べたこと、成果物を勝手に解説、といった内容を予定しています。 備忘録的な性質が強いかもしれませんが、誰かの役に立つことがあれば幸いです。