BAD_ACCESS

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

アプリ起動時に同期の処理を行う。ー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で同期の処理を開始する

SyncEngineCoreDataControllerを組み込み終え、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];
    }];
}

無事におでんデータが表示できたようです。

 2013-12-07 20.57.28.png

id:marigomochaさんおでんの具ありがとう!

Sampleプロジェクトの公開

今回、チュートリアルに従い作成したサンプルプロジェクトは、ParseのフレームワークとApplication ID、Secretを除いたものをGitHubにアップしています。

GitHub:somtd / LocalCacheSample