アプリ起動時に同期の処理を行う。ーParseでローカルキャッシュ(4)
※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
AppDelegateで同期の処理を開始する
SyncEngineとCoreDataControllerを組み込み終え、Odenデータモデルの作成を終えればようやく、同期の処理をテストすることができます。
AppDelegateに以下のように同期の準備を行います。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Parse
[Parse setApplicationId:YOUR_APP_ID
clientKey:YOUR_CLIENT_KEY];
[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];
//Register Sync Class
[[SyncEngine sharedEngine] registerNSManagedObjectClassToSync:[Oden class]];
return YES;
}
アプリが起動した時点で同期処理を実行します。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[SyncEngine sharedEngine] startSync];
}
同期したデータをCoreDataから取得して表示させる。
アプリの起動時に同期したデータはCoreDataから取得することができるので、 呼び出すViewController上で、下記のようにデータを取得することで、毎回ParseのAPIを叩く必要がなくなります。
- (void)loadOdenFromCoreData {
[self.managedObjectContext performBlockAndWait:^{
[self.managedObjectContext reset];
NSError *error = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Oden"];
[request setSortDescriptors:[NSArray arrayWithObject:
[NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO]]];
self.odens = [self.managedObjectContext executeFetchRequest:request error:&error];
[self.odensView reloadData];
}];
}
無事におでんデータが表示できたようです。

id:marigomochaさんおでんの具ありがとう!
Sampleプロジェクトの公開
今回、チュートリアルに従い作成したサンプルプロジェクトは、ParseのフレームワークとApplication ID、Secretを除いたものをGitHubにアップしています。