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