- 発表者:
- 日時:
- 2013.03.02
- 場所:
- iOS部 @下北沢オープンソースCafe
- テーマ:
- AFIncrementalStoreを利用すると何ができるか
- AFIncrementalStoreとは何か
- NSIncrementalStoreとは何か
- AFIncrementalStoreは何をしているか
- AFIncrementalStoreはどのように利用するか
- その他
$ git clone --recursive git://github.com/AFNetworking/AFIncrementalStore.git
$ open AFIncrementalStore/AFIncrementalStore.xcworkspace
- Basic Example
- アーティスト一覧画面
- NSFetchedResultsController
- (各アーティストの)楽曲一覧画面
- Relationship先の
songs
を参照
- Relationship先の
- AppDelegate
SongsIncrementalStore
(AFIncrementalStoreのサブクラス)- NSPersistentStoreCoordinatorへ追加
backingPersistentStoreCoordinator
にInMemoryStoreTypeのストアを追加
- アーティスト一覧画面
- Activity Stream Example
- フィード画面
- NSFetchedResultsController
- AppDelegate
AppDotNetIncrementalStore
(AFIncrementalStoreのサブクラス)- NSPersistentStoreCoordinatorへ追加
backingPersistentStoreCoordinator
にSQLiteStoreTypeのストアを追加
- フィード画面
- CheckIns Example
- チェックイン一覧画面
- NSFetchedResultsController
CheckIn
エンティティのinsert
- AppDelegate
CheckInsIncrementalStore
(AFIncrementalStoreのサブクラス)- NSPersistentStoreCoordinatorへ追加
backingPersistentStoreCoordinator
にSQLiteStoreTypeのストアを追加
- チェックイン一覧画面
- サーバーとのデータ同期とCoreDataによるローカルでのデータ永続化
- → より簡潔に記述できるように!
- (iOS5以降に登場した)NSIncrementalStoreを利用
- サーバーとのデータ同期とデータ永続化の簡潔化を目的としているという点で類似
- 過去の資料
- 主な機能
- 通信処理
- (通信レスポンスに対する) マッピング定義
- CoreDataとの連携
- AFIncrementalStoreとの(決定的な)違い
- RestKit: 通信処理のレスポンスをCoreDataへ流し込む
- CoreDataを外部から利用するイメージ
- AFIncrementalStore: CoreDataのデータアクセス時に通信処理を実行
- すべての処理がCoreDataの内部で完結するイメージ
- RestKit: 通信処理のレスポンスをCoreDataへ流し込む
- CoreDataがストアと通信する際に利用するAPIが定義されている
- 抽象クラス
- メソッドのオーバーライドにより、ストアに対する適当な処理を記述
- → ストアに対する振舞いをカスタマイズ可能
- 要オーバーライドのメソッド
-loadMetadata:
-executeRequest:withContext:error:
-newValuesForObjectWithID:withContext:error:
-newValueForRelationship:forObjectWithID:withContext:error:
-obtainPermanentIDsForObjects:error:
- NSIncrementalStoreの各メソッドの呼び出しタイミングは?
- サンプルプロジェクトで各メソッドにブレークポイントを仕掛けて見る
- AFIncrementalStoreは、各メソッドにどのような記述をしている?
-executeRequest:withContext:error:
を重点的に追って見る
- 導入手順
- Installation
- CocoaPodsによるインストール推奨 pod
- 実装手順
- ローカルでのデータ永続化のための永続ストアの追加 Incremental Store Persistence
- 必要に応じて
AFIncrementalStoreHTTPClient
プロトコルのメソッドを実装 Mapping Core Data to HTTPAFRESTClient
のサブクラスを作成して実装- 基本的な処理は
AFRESTClient
で実装済み
AFIncrementalStore
のサブクラスを作成
- 注意点
- Requirements
- Xcode 4.4
- iOS 5.0/Mac OS 10.6
- AFNetworking 0.9
- ライセンス
- MIT
- Differences between RestKit and AFIncrementalStore - Stack Overflow
- 最新のRestKit (0.2.x系) は、従来と比べてかなり軽量に
- RestKitの通信処理部分はAFNetworkingを利用、AFIncrementalStoreも同様
- RestKitはドキュメントが充実
- RestKitはカバレッジ率が高い
- RestKitの方が通信レスポンスに対するマッピングを、より複雑に定義可能
- Building an iOS App with AFIncrementalStore and the Core Data Buildpack
- Core Data Buildpack
- Core Dataのモデルファイル (.xcdatamodel) からRESTfulなWebサービスの構築
- herokuへ手軽にデプロイ可
- AFIncrementalStoreと組合せたiOSアプリの作成
- Core Data Buildpack
- AFIncrementalStoreの特徴
- サーバーとのデータ同期とCoreDataによるローカルでのデータ永続化の記述をより簡潔に
- iOS5以降に登場したNSIncrementalStoreを利用
- NSIncrementalStoreを応用した例としては貴重
- 類似OSSのRestKitの方が、現時点では利用しやすいか
- AFIncrementalStore // Speaker Deck
- Core Data の概要と NSIncrementalStore
- NSIncrementalStore : NSHipster
- NSIncrementalStore – The future of web services in iOS / Mac OS X | Sealed Abstract
- Incremental Store Programming Guide: About Incremental Stores
- WWDC 2011
- Session 303 - What’s New in Core Data on iOS
- Session 315 - What’s New in Core Data on Mac OS X