Core Data バッドプラクティス
Upcoming SlideShare
Loading in...5
×
 

Core Data バッドプラクティス

on

  • 5,259 views

2013年11月札幌iPhone開発懇談会勉強会プレゼンテーション資料。 iOS CoreData徹底入門 販売記念。CoreData のバッドプラクティスを紹介します。

2013年11月札幌iPhone開発懇談会勉強会プレゼンテーション資料。 iOS CoreData徹底入門 販売記念。CoreData のバッドプラクティスを紹介します。

Statistics

Views

Total Views
5,259
Views on SlideShare
5,006
Embed Views
253

Actions

Likes
25
Downloads
25
Comments
0

4 Embeds 253

http://somtd.hatenablog.com 229
https://twitter.com 18
http://feedly.com 4
https://www.chatwork.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Core Data バッドプラクティス Core Data バッドプラクティス Presentation Transcript

  • CoreData バッドプラクティス
  • お題目 • 簡単な自己紹介 • CoreData 書籍 • バッドプラクティスCoreData • バッドプラクティスからのリカバリ
  • 簡単な自己紹介 • iPhoneのアプリ開発者 • 頭わるいアプリ開発 • アプリの企画提案(サービス/フレームワークの提案) • 喫茶作業者
  • 開発アプリ Wifiルーター用アプリ 印刷サービス用アプリ
  • CoreData の書籍
  • iOS CoreData徹底入門 • 前半sqlite、後半CoreDataの 構成 • 利用ケースに基づいたサンプ ルコード • マルチスレッドについて言及 なし • バイナリを格納する方法につ いて詳しい
  • CoreData を使う ユーザが増えるのは うれしいかぎり。
  • ただしCoreDataで 思わぬ罠に陥る事も…
  • そもそも使う 必要がある?
  • SQLライクにデータを永続化&問い合わせ機 能を実現するのであれば(既にsqliteに関する 知識があれば)sqlite も選択肢かも。
  • 規模がそれ程大きくない場合は、 NSArray、NSDictionary で永続化、 NSPredicate を使って絞り込みが可 能。
  • 規模がそれ程大きくない場合は、 NSArray、NSDictionary で永続化、 NSPredicate を使って絞り込みが可能。
  • NSPredicte による データの問い合わせ • NSPredicate によるデータの問い合わせが可能 • 指定方法がNSString のフォーマット分に近い ものが使える(同じではない) • plist で絞り込めるのは(500-1000要素ぐらいが 限界)
  • NSPredicateについては サンプルコード参照 https://github.com/ notoroid/SimpleSearch
  • CoreDataの特徴 • NSPredicte によるデータの問い合わせ • データモデルのアップグレードがそこそこ整備(マイ グレーション) • データの永続化とオブジェクト管理が分離されてい る(取り消しやマルチスレッドにも応用可) • オブジェクトっぽく扱える
  • データの永続化 • オブジェクトの形でデータを永続化できる オブジェクトの形で なければ他の選択肢 で良くないのでは?
  • データモデルの アップグレード機能がそこそこ整備 • 複数のデータモデルを定義して、データモデ ル間のデータモデルのアップグレードが可能 • データモデル間のアップグレード方法を指定 することができる(自動、手動) • sqlite でもできないことはない
  • オブジェクトっぽく扱える • NSManagedObject がCoreDataのオブジェク ト。NSManagedObject から値を取得 • NSManagedObject をカスタマイズして、オ ブジェクトのプロパティのように扱うことも 可能
  • CoreData の立ち位置は? • sqlite や、plist で実現可能な事が重複してい る。 • オブジェクトを永続化することに関して網羅 的だがCoreDataを使う上で抑えておくことが 多い。 • iOS SDKでもミドルウェア的扱い。
  • CoreData を採用するに あたって • データモデルの継続的アップグレードが必要? • バックグラウンドとフォアグランドでデータ の更新が必要? • 他のアプリ開発でもステレオタイプにデータ を扱いたい?
  • もしそうでなければ 他の手段を探してみて は?
  • バッドプラクティス CoreData
  • CoreData を使う上で 悪い例を紹介
  • バッドプラクティス① CoreData の ミドルウェアを使う
  • MagicalRecord • パッケージ管理(CocoaPods) で見つかる • データモデルに基づいてカスタムクラスを自 動生成&マイグレーション機能を提供 • CreDataを使う上で便利な機能を提供
  • MagicalRecord • カスタムクラス • 無駄に巨大(全文検索の邪魔) • 検索できる有益な情報がCoreDataそのものよ り少ない。 • デフォルトのストレージ位置が BundleDisplayName(アプリの表示名)
  • デフォルトのストレージ位置が BundleDisplayName(アプリの表示名) • アプリの表示を変えると、以前の保存用デー タのパスを忘れてしまう。 • アプリの表示名を変更するだけで、データベー スが消去されたように錯覚してしまう。
  • 何が言いたいかと いうと
  • 初期の開発スピードは稼げる が、メンテナンスに伴う作業 は悲惨なものになる
  • MagicalRecord へのフォロー • おそらくは、Twitter やFacebookページをなど もオフラインデータの利用を想定したもの • ユーザの貴重なデータを取り扱うことはあま り想定されていないかもしれない。
  • 技術査定の問題 • 検索経由で探し出したミドルウェアは技術の 査定ができてないかも? • パッケージ管理に対応しているミドルウェア は最良の解決方法?
  • バッドプラクティス② データの中に画像
  • データの中に画像 • CoreDataのデータモデルに定義にバイナリ データを指定可能 • イメージもバイナリデータの形で保存可能 • ファイルで保存するよりも管理が楽。
  • • 本来サムネイルだけだったのがいつの間にか 多用 • 格納する画像解像度を高くすると、永続化デー タのサイズが巨大化。メモリオーバーで落ち る • シミュレータや、最新機種だけでテストする と問題を発見できない
  • まとめ • ミドルウェア相当のCoreDataに対して、ミドル ウェアは蛇足かも? • パッケージ管理で取り入れるミドルウェアは用途 に応じて査定しましょう。査定しないミドルウェ アを納品するとあなたの信用が目減りします。 • データモデルへの画像を含める事は可能であって も、それが妥当か検討しましょう。
  • バッドプラクティス からのリカバリ
  • バッドプラクティス 満載のアプリを リリースしてしまった。
  • もうお手上げ?
  • CoreData 様は バッドプラクティス満載の アプリにも救いの手を 差し伸べてくれます。
  • バッドプラクティス からの脱却 • データモデルをアップグレードして大きなバ イナリデータを外に追い出す。 • データモデルのアップグレードには、データ モデルマッピングを使う。 • バイナリデータを外に書き出すには手動アッ プグレードを用意する。
  • 新しい属性を追加するだけであれば、データマッ ピングファイルは必要ない。
  • データモデル内の属性名を変 更程度であればモデルマッピ ングソフトの作成だけで済む。
  • デモコード
  • https://github.com/ notoroid/ CoreDataImageMigrati onSample
  • 注意点 • データモデルの名前にアンダーバー(_) を使う とデータマッピングを読み込まなくなる • 誤ったデータモデルを追加した場合は、手動 でプロジェクトファイルを編集する必要が出 てくる
  • まとめ • iOS CoreData 徹底入門 が出たことCoreData が身近になりました。 • ステレオタイプにiOSアプリのデータを扱いた いのであれば、この機会に学んでみてはいか がでしょう?
  • http://irimasu.com Twitter: @notoroid 公式: @irimasu