狠狠撸

狠狠撸Share a Scribd company logo
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
Core Data バッドプラクティス
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 様は
バッドプラクティス満載の
アプリにも救いの手を
差し伸べてくれます。
バッドプラクティス
からの脱却
? データモデルをアップグレードして大きなバ
イナリデータを外に追い出す。
? データモデルのアップグレードには、データ
モデルマッピングを使う。
? バイナリデータを外に書き出すには手動アッ
プグレードを用意する。
新しい属性を追加するだけであれば、データマッ
ピングファイルは必要ない。
データモデル内の属性名を変
更程度であればモデルマッピ
ングソフトの作成だけで済む。
Core Data バッドプラクティス
デモコード
https://github.com/
notoroid/
CoreDataImageMigrati
onSample
注意点
? データモデルの名前にアンダーバー(_) を使う
とデータマッピングを読み込まなくなる
? 誤ったデータモデルを追加した場合は、手動
でプロジェクトファイルを編集する必要が出
てくる
まとめ
? iOS CoreData 徹底入門 が出たことCoreData
が身近になりました。
? ステレオタイプにiOSアプリのデータを扱いた
いのであれば、この機会に学んでみてはいか
がでしょう?
http://irimasu.com
Twitter: @notoroid
公式: @irimasu

More Related Content

Core Data バッドプラクティス