無料とサブスクリプションの 2 つの層がある Parse を使用して iOS アプリを作成しています。無料層は、作成されたオブジェクトのクラウド永続性をサポートしていませんが、サブスクリプション層はサポートしています。つまり、ユーザーは好きなだけ無料でアプリをダウンロードして使用でき、この期間中にデバイス永続オブジェクトを作成できます。このオブジェクトは、サブスクライブ/ログインを選択した場合に後でアップロードされます。
ネットワークに接続されていない無料利用枠に問題があります。
この層を設計するために、私は Parse のローカル データストアを使用しています。ユーザーが次のものを作成するとしますUserData
PFObject
。
let newUserData = PFObject.objectWithClassName("UserData")
newUserData["someUserDataKey"] = "abc"
newUserData.pinInBackground()
この部分は問題ありません。ローカル データストアUserData
オブジェクトに対してクエリを実行し、テーブル ビューなどを作成できます。私が遭遇する問題は、ユーザーが後でこれらのオブジェクトのいずれかの値を変更したときです。
// aUserData is an instance of PFObject which has already
// been pinned to the local datastore
aUserData["someUserDataKey"] = "xyz"
その後、どのバージョンの も呼び出しませんaUserData.save()
。これは、それらを Parse クラウドに保持していないためです。アプリが開いている残りの時間では、変更された を表示するすべてのビュー コントローラーは、予想どおり、 の値をaUserData
適切に認識します。xyz
someUserDataKey
ただし、マルチタスク ビューからアプリを終了して再度開くと、foraUserData
に戻ります。私はこれが起こるとは思っていませんでした。代わりに、ローカル データストア内のオブジェクトへの変更が持続することを想像しました。また、アプリの再起動までは持続するが、再起動後は持続しないのも奇妙だと思います.abc
someUserDataKey
aUserData.pin()
オブジェクトに変更を加えた後に呼び出すという問題の回避策を発見しました。なぜこれが必要なのかはわかりませんが、より一般的にはpin()
、既にピン留めされたオブジェクトに対して 2 回目の呼び出しを行うと、どのような動作が期待されるのでしょうか。
この種のセットアップのベスト プラクティスは何ですか?