Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
AFIncrementalStoreの紹介(発表メモ)

AFIncrementalStoreの紹介(発表メモ)

発表の流れ

  1. AFIncrementalStoreを利用すると何ができるか
  2. AFIncrementalStoreとは何か
  3. NSIncrementalStoreとは何か
  4. AFIncrementalStoreは何をしているか
  5. AFIncrementalStoreはどのように利用するか
  6. その他

サンプルプロジェクト

cloneの方法

$ git clone --recursive git://github.com/AFNetworking/AFIncrementalStore.git
$ open AFIncrementalStore/AFIncrementalStore.xcworkspace

内容

  • Basic Example
    • アーティスト一覧画面
      • NSFetchedResultsController
    • (各アーティストの)楽曲一覧画面
      • Relationship先の songs を参照
    • 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のストアを追加

AFIncrementalStoreの特徴

  • サーバーとのデータ同期とCoreDataによるローカルでのデータ永続化
    • → より簡潔に記述できるように!
  • (iOS5以降に登場した)NSIncrementalStoreを利用

RestKitの復習

  • サーバーとのデータ同期とデータ永続化の簡潔化を目的としているという点で類似
  • 過去の資料
  • 主な機能
    • 通信処理
    • (通信レスポンスに対する) マッピング定義
    • CoreDataとの連携
  • AFIncrementalStoreとの(決定的な)違い
    • RestKit: 通信処理のレスポンスをCoreDataへ流し込む
      • CoreDataを外部から利用するイメージ
    • AFIncrementalStore: CoreDataのデータアクセス時に通信処理を実行
      • すべての処理がCoreDataの内部で完結するイメージ

NSIncrementalStoreとは

  • CoreDataがストアと通信する際に利用するAPIが定義されている
  • 抽象クラス
    • メソッドのオーバーライドにより、ストアに対する適当な処理を記述
    • ストアに対する振舞いをカスタマイズ可能
  • 要オーバーライドのメソッド
    • -loadMetadata:
    • -executeRequest:withContext:error:
    • -newValuesForObjectWithID:withContext:error:
    • -newValueForRelationship:forObjectWithID:withContext:error:
    • -obtainPermanentIDsForObjects:error:

もう一度、サンプルプロジェクトへ

  1. NSIncrementalStoreの各メソッドの呼び出しタイミングは?
    • サンプルプロジェクトで各メソッドにブレークポイントを仕掛けて見る
  2. AFIncrementalStoreは、各メソッドにどのような記述をしている?
    • -executeRequest:withContext:error:を重点的に追って見る

AFIncrementalStoreの基本的な使い方

  • 導入手順
  • 実装手順
    1. ローカルでのデータ永続化のための永続ストアの追加 Incremental Store Persistence
    2. 必要に応じて AFIncrementalStoreHTTPClient プロトコルのメソッドを実装 Mapping Core Data to HTTP
      • AFRESTClient のサブクラスを作成して実装
      • 基本的な処理は AFRESTClient で実装済み
    3. AFIncrementalStore のサブクラスを作成
  • 注意点
    • Requirements
    • Xcode 4.4
    • iOS 5.0/Mac OS 10.6
    • AFNetworking 0.9
  • ライセンス
    • MIT

AFIncrementalStore vs RestKit

  • Differences between RestKit and AFIncrementalStore - Stack Overflow
    • 最新のRestKit (0.2.x系) は、従来と比べてかなり軽量に
    • RestKitの通信処理部分はAFNetworkingを利用、AFIncrementalStoreも同様
    • RestKitはドキュメントが充実
    • RestKitはカバレッジ率が高い
    • RestKitの方が通信レスポンスに対するマッピングを、より複雑に定義可能

おまけ: "AFIncrementalStore"と"Core Data Buildpack"を利用したiOSアプリ構築

まとめ

  • AFIncrementalStoreの特徴
    • サーバーとのデータ同期とCoreDataによるローカルでのデータ永続化の記述をより簡潔に
    • iOS5以降に登場したNSIncrementalStoreを利用
  • NSIncrementalStoreを応用した例としては貴重
  • 類似OSSのRestKitの方が、現時点では利用しやすいか

参考/関連

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment