アプリ起動時に同期の処理を行う。ー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にアップしています。