2016-01-29 6 views
5

これはParse falloutの少しです。DynamoDBとiOSを使用してオフラインモードをサポートする方法を教えてください。

私はDynamoDBを使用するようにアプリケーションを移動していますが、どのような種類のオフラインモードもサポートしていないようです。

どうすればよいですか?

レルムを使用したいと思いますが、同期とオブジェクトを管理する必要があります。< - > noSQL。それが同期されていることを示すために行にフラグを付ける必要がありますか?

Dynamoにあるように行をフラットに保つべきですか?

ここでは、Cognitoの同期部分は適用されません。

答えて

2

私は以前DynamoDBを使用していませんでしたが、AmazonのウェブサイトのiOSドキュメントを読んだだけです。この2つを統合することは可能で、比較的簡単であるはずです。

Realmと同じ方法で、DynamoDBでデータモデルを定義するように見えます。AWSDynamoDBObjectModelのサブクラスを作成し、プロパティを追加します。この場合、一致するプロパティが同じRealm Object(またはObjective-CではRLMObject)を作成していれば、理論上、DynamoDBオブジェクトをRealmに直接渡して保存することができます。

let realm = try! Realm() 

try! realm.write { 
    realm.create(MyRealmSubclass.self, value: MyDynamoDBObject, update: true) 
} 

Realmは、KVCを使用して、それに渡されたオブジェクトがモデルオブジェクトのスキーマに準拠しているかどうかを確認し、その情報を自動的に取得して保存することができます。

(NB:update:が正しく動作するためには、オブジェクトが共通の主キープロパティも共有する必要があります)。

アプリのオフライン中にRealm内のローカルに保存されたデータを変更してから、その変更されたデータをプッシュすると、デバイスはオンラインに戻ります。 AWSにプッシュバックするために、RealmモデルオブジェクトをDynamoDBオブジェクトに変換し直します。

ブール値hasChangesフラグ、またはlastModifiedDate日付オブジェクトなど、追加のプロパティをRealmモデルに追加して、オフラインオブジェクトにアップロードが必要な変更があることを確認することができます。

追加の説明が必要な場合はお知らせください。

(フル開示:私はレルムのために働く)

+0

どのような素晴らしいアイデア!私はそれを行って、あなたに戻ってきます。 –

+0

目的コードCに相当するコードは何でしょうか? –

+1

Objective-Cの同等のAPIメソッドは '[RLMObject createOrUpdateInRealm:withValue:]'です! :) – TiM

関連する問題