BAD_ACCESS

おもにiOS、ときどき変な電子工作、ガジェット話。

同期用のクラス"SyncEngine"とCoreData周りの処理を追加する ーParseでローカルキャッシュ(3)

※tech.kayac.com Advent Calendar 2013に投稿したぼっちiOS開発者がParse(Parse.com)使った結果wwwwwwwww の補足記事になります。 量が多かったので全部で4つの記事に分けています。

Parse.com上に自分のプロジェクトを作成して、いくつかのデータを追加する。ーParseでローカルキャッシュ(1)

Xcode上でプロジェクトを作成し、"ParseSDK"と"AFNetworking"を導入する。ーParseでローカルキャッシュ(2)

同期用のクラス"SyncEngine"とCoreData周りの処理を追加する ーParseでローカルキャッシュ(3)

アプリ起動時に同期の処理を行う。ーParseでローカルキャッシュ(4)

※基本的には以下の記事の内容通りに進めています。自分のアプリに応じて適宜、書き換えていただければと思います。 How To Synchronize Core Data with a Web Service – Part 1 How To Synchronize Core Data with a Web Service – Part 2

"SyncEngine"と"CoreDataController"の追加

チュートリアル記事にて用意されている同期用のクラスSyncEngineをプロジェクトに追加します。

SyncEngine.h

SyncEngine.m

CoreDataController(CoreData周りの処理)を追加します。

CoreDataController.h

CoreDataController.m

あと忘れずに"CoreData.framework"もプロジェクトに追加してください。

"SyncEngine"の役割

SyncEngineの役割は文字通り同期をすることなのですが、SyncEngine内で行われている動きを大まかに把握しておこうと思います。

1.Register

- (void)registerNSManagedObjectClassToSync:(Class)aClass;

同期の対象となるクラスを登録します。

2.Start Sync

- (void)startSync;

同期を開始します。

3.Download Data (from Parse)

- (void)downloadDataForRegisteredObjects:(BOOL)useUpdatedAtDate;

Parseからデータをダウンロードします。また、CoreDataに保存されたデータから最新の更新日付を取り出して、

- (NSDate *)mostRecentUpdatedAtDateForEntityWithName:(NSString *)entityName;

最新の更新日付以降のものをリクエストするようになっています。

4.Application Cache (JSON to Disk)

- (void)writeJSONResponse:(id)response toDiskForClassWithName:(NSString *)className;

JSONで受けとったレスポンスをいったんファイルにキャッシュしています。このキャッシュをもとにCoreDataに書き込みにいきます。

5. Set Record into CoreData

- (void)processJSONDataRecordsIntoCoreData;

CoreDataへの書き込み処理が完了すると、キャッシュ情報を削除します。

6. Delete Cache

- (void)deleteJSONDataRecordsForClassWithName:(NSString *)className;

以上が"SyncEngine"の一連の流れになります。

CoreDataのモデル作成

Xcodeの新規ファイル追加からCore DataのData Model作成を行います。

新しいEnitiyを追加して(ここではOden)下図のようにAtributeも追加していきます。

 2013-12-07 23.04.53.png

これにて、同期処理までの準備は完了です。

次の記事:アプリ起動時に同期の処理を行う。ーParseでローカルキャッシュ(4)