Skip to content

Instantly share code, notes, and snippets.

@jiro
Last active December 14, 2015 10:09
Show Gist options
  • Save jiro/5069727 to your computer and use it in GitHub Desktop.
Save jiro/5069727 to your computer and use it in GitHub Desktop.
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