狠狠撸

狠狠撸Share a Scribd company logo
Core Data の概要と
NSIncrementalStore
 かねうちてつや
 Cocoa勉強会関西 2012/12/01
自己紹介
かねうちてつや @kaniza

フェンリル所属 http://www.fenrir-inc.com/

 Sleipnir for Mac, Sleipnir Mobile for iPhone / iPad 等

好きなもの: Emacs, オブジェクト指向, ビール

嫌いなもの: Singleton
近況
開発に復帰してそろそろ2ヶ月

 バグの原因を特定してることが多い

 Mac の開発がメイン

App Store 申請時に LAN が重くなる事態が発生

iPhone 4S の Wi-Fi が死亡
今日のお題
Core Dataの概要

 何がうれしいの?

 構成ざっくり解説

 ちょっと高度な话

Core Data の新しい機能: NSIncrementalStore
Core Data
OS X / iOS のデータ管理フレームワーク

2005年 Mac OS X 10.4 Tiger とともに登場

2009年 iOS 3.0 に搭載

多くのアプリで採用される主要機能のひとつ

表には出ないながらも着実に機能強化されている
何をしてくれるのか
データ設計

設計したデータのセーブ?ロード

 いわゆる永続化

実行中のデータ変更管理

UndoとかRedo
Core Data よく聞く声
むずかしそう

よくわからん

遅い

速くない
Core Dataよく聞く声
複雑なことを扱うので複雑なのはしょうがない

洗練された設計

機能が充実

自分で書くよりは速い

遅いのはチューニングできる
他の手法
User Defaults
Property List
SQLite
XML, 闯厂翱狈など
Core Data の長所
大量のデータを扱える

 バックエンドに SQLite を利用できる

かなり高度なことが比較的簡単にできる

データをオブジェクトとして扱える

Apple純正

 AppKit や UIKit などと親和性が高い
Core Data の短所
関連クラスが多く覚えることが多い

どうしてもチューニングできないところがある

OS X / iOS でしか動かない
とはいえ、Apple 純正
ぜひ活用したい
デモ
デモの中身
都道府県+氏名のデータ5000件(ダミー)

特定の都道府県の氏名だけをアイウエオ順に表示

実機でも十分なパフォーマンス

表示時は20件ずつ取得
登场人物
コンテキスト
                                Pref
                Person           Y
       Fetch      X
アプリ   Request                   Person
                Person            Y
                  Z      Pref
                          X

                データモデル

                   永続化ストア
データモデル
Core Data におけるデータ構造を表現したもの

NSManagedObjectModel クラス

データオブジェクトのインスタンスに対する「クラ
ス」に近い概念
コンテキスト
                                Pref
                Person           Y
       Fetch      X
アプリ   Request                   Person
                Person            Y
                  Z      Pref
                          X

                データモデル

                   永続化ストア
マネージド?オブジェクト
データモデルにもとづくインスタンス

 つまりアプリに関連するデータオブジェクト

 1つのクラスで様々なデータモデルに対応

NSManagedObject → 管理されてるオブジェクト

 生成、保存、メモリ管理などがCore Dataの管理下

 アプリ側はあんまり管理しない
NSManagedObject vs サブクラス

//	
 ?NSManagedObject	
 ?をそのまま使う場合
NSManagedObject	
 ?object	
 ?=	
 ?....;
NSString	
 ?*name	
 ?=	
 ?[object	
 ?valueForKey:@”name”];


//	
 ?サブクラスを作れば...。必要ならロジックも実装可
Person	
 ?*person	
 ?=	
 ?....;
NSString	
 ?*name	
 ?=	
 ?person.name;
コンテキスト
                                Pref
                Person           Y
       Fetch      X
アプリ   Request                   Person
                Person            Y
                  Z      Pref
                          X

                データモデル

                   永続化ストア
永続化ストア
マネージドオブジェクトを保存しておくところ

NSPersistentStoreとNSPersistentStoreCoordinatorの組
合せで実現
コンテキスト
                                Pref
                Person           Y
       Fetch      X
アプリ   Request                   Person
                Person            Y
                  Z      Pref
                          X

                データモデル

                   永続化ストア
コンテキスト
マネージドオブジェクトが存在する場所

保存とか検索とかの操作対象となる

NSFetchRequest を通じてマネージド?オブジェクト
を検索して取得
Core Data の概要と NSIncrementalStore
コード见てみる
NSFetchedResultsController
iOS の Table View のデータソースに Core Data を使う
時に便利なクラス

特定条件でのマネージド?オブジェクト取得?変更
の監視などを効率的に実行

データの変更を簡単に Table View に反映できる

使い方がパターン化しており再利用性が高い
ちょっと高度な话
Core Data と並列処理
コンテキストとその中のマネージド?オブジェクトは
「生成したスレッド」でのみアクセスする

 スレッドごとに複数のコンテキストを作って、保存
 時にマージできる

 スレッド間でやりとりする場合は ObjectID を使う

Lion / iOS 5 以降は非同期処理対応が改善
最近困っていること
某アプリでMac を起動後はじめての起動で、ある特
定の fetch が恐ろしいほど遅い

 数十秒以上かかるケースも

 2回目以降は(アプリ再起動しても)速い

 pread で刺さっている。バックグラウンドでも刺さ
 ってメインスレッドがほぼ止まる
NSIncrementalStore
NSIncrementalStore
NSPersistentStore の抽象サブクラス

 SQLite や XML の代わりに使える

兄弟クラス: NSAtomicStore

 CSVファイルなどをデータストアに使う
NSIncrementalStore
ちょっとずつアクセスするストア

主に Web サービスを想定

 Core Data のバックエンドに Web サービス!

Incremental Store Programming Guide を読むしか!

 でも実質1ページしかない!よくわからん!!
でも注目している人はいる
http://sealedabstract.com/code/nsincrementalstore-the-future-of-web-services-in-ios-mac-os-x/
http://nshipster.com/nsincrementalstore/
AFIncrementalStore
AFIncrementalStore
AFNetworking ライブラリの拡張として提供

AFRESTClient のサブクラスを実装すれば HTTP ベー
スのウェブサービスを利用するNSIncrementalStoreが
(ほぼ)完成!

SQLite も補助的なバックエンドとして使う

 裏でもうひとつコンテキストを管理している
<AFIncrementalStoreHTTPClient>



                                    AFHTTPClient


AFIncrementalStore                  AFRESTClient


MyIncrementalStore                  MyRESTClient
MyRESTClient でやること

Fetch Request を HTTP Request に変換

レスポンスから対象となる配列を抽出

レスポンス内のデータをデータモデルのデータにマッ
ピング

その他ごにょごにょ
Incremental Store のすすめ
Incremental Store は将来性のある機能

 でもあんまり話題にはなっていない

定評ある AFNetworking 方面で実装が登場

次回勉強会テーマにピッタリ!
まとめ
Core Data は面倒だけど便利です

 「マネージド」な快感がわかったら勝ち

Incremental Store 面白そうなのでおすすめです

pread で刺さって困ってる人いませんか?

More Related Content

Viewers also liked (20)

Adventures in Multithreaded Core Data
Adventures in Multithreaded Core DataAdventures in Multithreaded Core Data
Adventures in Multithreaded Core Data
Inferis
?
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
CocoaHeads
?
Dicom standard-of-china 2011-03
Dicom standard-of-china 2011-03Dicom standard-of-china 2011-03
Dicom standard-of-china 2011-03
Jay Thakkar
?
Survival Kit to Asian Business Culture
Survival Kit to Asian Business CultureSurvival Kit to Asian Business Culture
Survival Kit to Asian Business Culture
Hanuman Consulting
?
????????????? ??????????????????
????????????? ??????????????????????????????? ??????????????????
????????????? ??????????????????
Khemjira_P
?
Armageddon great war- end of times
Armageddon  great war- end of timesArmageddon  great war- end of times
Armageddon great war- end of times
Arsalan Mazhar
?
Jessica Floeh - Transformative Fashion for Diabetes Technologies
Jessica Floeh - Transformative Fashion for Diabetes TechnologiesJessica Floeh - Transformative Fashion for Diabetes Technologies
Jessica Floeh - Transformative Fashion for Diabetes Technologies
Healthcare Experience Design Conference
?
Pythagoras
PythagorasPythagoras
Pythagoras
visserassen
?
M.Phil Computer Science Network Security Projects
M.Phil Computer Science Network Security ProjectsM.Phil Computer Science Network Security Projects
M.Phil Computer Science Network Security Projects
Vijay Karan
?
Modal verbs for giving advice
Modal verbs for giving adviceModal verbs for giving advice
Modal verbs for giving advice
ipasipas
?
Double page spread analysis
Double page spread   analysisDouble page spread   analysis
Double page spread analysis
jlimbmedia
?
?????? ???????? ??? ???????? ??????? ????????? ????????????
?????? ???????? ??? ????????   ??????? ????????? ?????????????????? ???????? ??? ????????   ??????? ????????? ????????????
?????? ???????? ??? ???????? ??????? ????????? ????????????
Ibrahimia Church Ftriends
?
???? ? ????
???? ? ???????? ? ????
???? ? ????
Ibrahimia Church Ftriends
?
Vinomio Presentation Fw2011
Vinomio Presentation Fw2011Vinomio Presentation Fw2011
Vinomio Presentation Fw2011
mgt_mcwine
?
Gurullos
GurullosGurullos
Gurullos
amjordan22
?
Beryllium (pembuatan)
Beryllium (pembuatan)Beryllium (pembuatan)
Beryllium (pembuatan)
901120125712
?
Adapting cities to climate variability and change bob
Adapting cities to climate variability and change bobAdapting cities to climate variability and change bob
Adapting cities to climate variability and change bob
Bob Eko Kurniawan
?
Adventures in Multithreaded Core Data
Adventures in Multithreaded Core DataAdventures in Multithreaded Core Data
Adventures in Multithreaded Core Data
Inferis
?
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
CocoaHeads
?
Dicom standard-of-china 2011-03
Dicom standard-of-china 2011-03Dicom standard-of-china 2011-03
Dicom standard-of-china 2011-03
Jay Thakkar
?
Survival Kit to Asian Business Culture
Survival Kit to Asian Business CultureSurvival Kit to Asian Business Culture
Survival Kit to Asian Business Culture
Hanuman Consulting
?
????????????? ??????????????????
????????????? ??????????????????????????????? ??????????????????
????????????? ??????????????????
Khemjira_P
?
Armageddon great war- end of times
Armageddon  great war- end of timesArmageddon  great war- end of times
Armageddon great war- end of times
Arsalan Mazhar
?
M.Phil Computer Science Network Security Projects
M.Phil Computer Science Network Security ProjectsM.Phil Computer Science Network Security Projects
M.Phil Computer Science Network Security Projects
Vijay Karan
?
Modal verbs for giving advice
Modal verbs for giving adviceModal verbs for giving advice
Modal verbs for giving advice
ipasipas
?
Double page spread analysis
Double page spread   analysisDouble page spread   analysis
Double page spread analysis
jlimbmedia
?
?????? ???????? ??? ???????? ??????? ????????? ????????????
?????? ???????? ??? ????????   ??????? ????????? ?????????????????? ???????? ??? ????????   ??????? ????????? ????????????
?????? ???????? ??? ???????? ??????? ????????? ????????????
Ibrahimia Church Ftriends
?
Vinomio Presentation Fw2011
Vinomio Presentation Fw2011Vinomio Presentation Fw2011
Vinomio Presentation Fw2011
mgt_mcwine
?
Beryllium (pembuatan)
Beryllium (pembuatan)Beryllium (pembuatan)
Beryllium (pembuatan)
901120125712
?
Adapting cities to climate variability and change bob
Adapting cities to climate variability and change bobAdapting cities to climate variability and change bob
Adapting cities to climate variability and change bob
Bob Eko Kurniawan
?

Similar to Core Data の概要と NSIncrementalStore (11)

僕がやった齿补尘濒戦略
僕がやった齿补尘濒戦略僕がやった齿补尘濒戦略
僕がやった齿补尘濒戦略
Hiroyuki Mori
?
Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方
一希 大田
?
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
Mie Mori
?
メテ?ィアコンテンツ向け记事検索顿叠として使う贰濒补蝉迟颈肠蝉别补谤肠丑
メテ?ィアコンテンツ向け记事検索顿叠として使う贰濒补蝉迟颈肠蝉别补谤肠丑メテ?ィアコンテンツ向け记事検索顿叠として使う贰濒补蝉迟颈肠蝉别补谤肠丑
メテ?ィアコンテンツ向け记事検索顿叠として使う贰濒补蝉迟颈肠蝉别补谤肠丑
Yasuhiro Murata
?
backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1
Makoto Haruyama
?
HTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリHTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリ
Yossy Taka
?
金魚本読書ノート JPA編
金魚本読書ノート JPA編金魚本読書ノート JPA編
金魚本読書ノート JPA編
Kazuyoshi Kamitsukasa
?
「モダンな」可视化アプリケーション开発とはどのようなものか?
「モダンな」可视化アプリケーション开発とはどのようなものか?「モダンな」可视化アプリケーション开発とはどのようなものか?
「モダンな」可视化アプリケーション开発とはどのようなものか?
Keiichiro Ono
?
ちいさなオブジェクトでドメインモデルを组み立てる
ちいさなオブジェクトでドメインモデルを组み立てるちいさなオブジェクトでドメインモデルを组み立てる
ちいさなオブジェクトでドメインモデルを组み立てる
増田 亨
?
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
?
僕がやった齿补尘濒戦略
僕がやった齿补尘濒戦略僕がやった齿补尘濒戦略
僕がやった齿补尘濒戦略
Hiroyuki Mori
?
Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方Windows ストア アプリの上手な作り方
Windows ストア アプリの上手な作り方
一希 大田
?
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
Mie Mori
?
メテ?ィアコンテンツ向け记事検索顿叠として使う贰濒补蝉迟颈肠蝉别补谤肠丑
メテ?ィアコンテンツ向け记事検索顿叠として使う贰濒补蝉迟颈肠蝉别补谤肠丑メテ?ィアコンテンツ向け记事検索顿叠として使う贰濒补蝉迟颈肠蝉别补谤肠丑
メテ?ィアコンテンツ向け记事検索顿叠として使う贰濒补蝉迟颈肠蝉别补谤肠丑
Yasuhiro Murata
?
backbone.jsの使用例 その1
backbone.jsの使用例 その1backbone.jsの使用例 その1
backbone.jsの使用例 その1
Makoto Haruyama
?
HTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリHTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリ
Yossy Taka
?
「モダンな」可视化アプリケーション开発とはどのようなものか?
「モダンな」可视化アプリケーション开発とはどのようなものか?「モダンな」可视化アプリケーション开発とはどのようなものか?
「モダンな」可视化アプリケーション开発とはどのようなものか?
Keiichiro Ono
?
ちいさなオブジェクトでドメインモデルを组み立てる
ちいさなオブジェクトでドメインモデルを组み立てるちいさなオブジェクトでドメインモデルを组み立てる
ちいさなオブジェクトでドメインモデルを组み立てる
増田 亨
?
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
?
Ad

More from Tetsuya Kaneuchi (7)

いま OS X アプリがアツい
いま OS X アプリがアツいいま OS X アプリがアツい
いま OS X アプリがアツい
Tetsuya Kaneuchi
?
いまさら NSArray
いまさら NSArrayいまさら NSArray
いまさら NSArray
Tetsuya Kaneuchi
?
Dependency Injection FAQ
Dependency Injection FAQDependency Injection FAQ
Dependency Injection FAQ
Tetsuya Kaneuchi
?
ワタシは厂颈苍驳濒别迟辞苍がキライだ
ワタシは厂颈苍驳濒别迟辞苍がキライだワタシは厂颈苍驳濒别迟辞苍がキライだ
ワタシは厂颈苍驳濒别迟辞苍がキライだ
Tetsuya Kaneuchi
?
Core Animation と View
Core Animation と ViewCore Animation と View
Core Animation と View
Tetsuya Kaneuchi
?
奥别产痴颈别飞でエラーページを表示する话
奥别产痴颈别飞でエラーページを表示する话奥别产痴颈别飞でエラーページを表示する话
奥别产痴颈别飞でエラーページを表示する话
Tetsuya Kaneuchi
?
惭痴颁もやもや话
惭痴颁もやもや话惭痴颁もやもや话
惭痴颁もやもや话
Tetsuya Kaneuchi
?
いま OS X アプリがアツい
いま OS X アプリがアツいいま OS X アプリがアツい
いま OS X アプリがアツい
Tetsuya Kaneuchi
?
ワタシは厂颈苍驳濒别迟辞苍がキライだ
ワタシは厂颈苍驳濒别迟辞苍がキライだワタシは厂颈苍驳濒别迟辞苍がキライだ
ワタシは厂颈苍驳濒别迟辞苍がキライだ
Tetsuya Kaneuchi
?
奥别产痴颈别飞でエラーページを表示する话
奥别产痴颈别飞でエラーページを表示する话奥别产痴颈别飞でエラーページを表示する话
奥别产痴颈别飞でエラーページを表示する话
Tetsuya Kaneuchi
?
Ad

Core Data の概要と NSIncrementalStore