SlideShare 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, JSONなど
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

PDF
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
PDF
イミュータブルデータモデルの極意
PDF
Datalogからsqlへの トランスレータを書いた話
PPTX
これからはNo sqlの時代って本当ですか
PPTX
MongoDBが遅いときの切り分け方法
PPTX
日本語:Mongo dbに於けるシャーディングについて
PDF
Spring Data in a Nutshell
PDF
[db tech showcase OSS 2017] A27: Talend + MariaDB(SpiderEngine)+ TableauでBI基盤...
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
イミュータブルデータモデルの極意
Datalogからsqlへの トランスレータを書いた話
これからはNo sqlの時代って本当ですか
MongoDBが遅いときの切り分け方法
日本語:Mongo dbに於けるシャーディングについて
Spring Data in a Nutshell
[db tech showcase OSS 2017] A27: Talend + MariaDB(SpiderEngine)+ TableauでBI基盤...

Viewers also liked (20)

PDF
Adventures in Multithreaded Core Data
PDF
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
PPT
Dicom standard-of-china 2011-03
PDF
Survival Kit to Asian Business Culture
PDF
Dyna 2011
PDF
เนื้อหาเรื่อง โครงงานคอมพิวเตอร์
PDF
Armageddon great war- end of times
PDF
Jessica Floeh - Transformative Fashion for Diabetes Technologies
PPTX
Pythagoras
PDF
M.Phil Computer Science Network Security Projects
PPTX
Modal verbs for giving advice
PDF
Double page spread analysis
PDF
الحياه المسيحيه رغم التحديات الكنيسه الانجيليه بالابراهيميه
PPTX
Nick Huseman
PDF
Nasza gminastepnica1
PDF
كتاب و قرار
PPT
Vinomio Presentation Fw2011
PPT
Gurullos
PPT
Beryllium (pembuatan)
PPTX
Adapting cities to climate variability and change bob
Adventures in Multithreaded Core Data
Встреча №8. NSIncrementalStore, или как заставить Core Data варить ваш собств...
Dicom standard-of-china 2011-03
Survival Kit to Asian Business Culture
Dyna 2011
เนื้อหาเรื่อง โครงงานคอมพิวเตอร์
Armageddon great war- end of times
Jessica Floeh - Transformative Fashion for Diabetes Technologies
Pythagoras
M.Phil Computer Science Network Security Projects
Modal verbs for giving advice
Double page spread analysis
الحياه المسيحيه رغم التحديات الكنيسه الانجيليه بالابراهيميه
Nick Huseman
Nasza gminastepnica1
كتاب و قرار
Vinomio Presentation Fw2011
Gurullos
Beryllium (pembuatan)
Adapting cities to climate variability and change bob
Ad

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

PDF
僕がやったXaml戦略
PPTX
Windows ストア アプリの上手な作り方
PPT
Big data解析ビジネス
PDF
メディアコンテンツ向け記事検索DBとして使うElasticsearch
KEY
Core Data
PDF
backbone.jsの使用例 その1
PDF
HTML5 Local Storageを利用したメモ帳アプリ
PDF
金魚本読書ノート JPA編
PDF
「モダンな」可視化アプリケーション開発とはどのようなものか?
PDF
ちいさなオブジェクトでドメインモデルを組み立てる
KEY
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
僕がやったXaml戦略
Windows ストア アプリの上手な作り方
Big data解析ビジネス
メディアコンテンツ向け記事検索DBとして使うElasticsearch
Core Data
backbone.jsの使用例 その1
HTML5 Local Storageを利用したメモ帳アプリ
金魚本読書ノート JPA編
「モダンな」可視化アプリケーション開発とはどのようなものか?
ちいさなオブジェクトでドメインモデルを組み立てる
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Ad

More from Tetsuya Kaneuchi (7)

PDF
いま OS X アプリがアツい
PDF
いまさら NSArray
PDF
Dependency Injection FAQ
PDF
ワタシはSingletonがキライだ
PDF
Core Animation と View
KEY
WebViewでエラーページを表示する話
KEY
MVCもやもや話
いま OS X アプリがアツい
いまさら NSArray
Dependency Injection FAQ
ワタシはSingletonがキライだ
Core Animation と View
WebViewでエラーページを表示する話
MVCもやもや話

Core Data の概要と NSIncrementalStore