1

無料とサブスクリプションの 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適切に認識します。xyzsomeUserDataKey

ただし、マルチタスク ビューからアプリを終了して再度開くと、foraUserDataに戻ります。私はこれが起こるとは思っていませんでした。代わりに、ローカル データストア内のオブジェクトへの変更が持続することを想像しました。また、アプリの再起動までは持続するが、再起動後は持続しないのも奇妙だと思います.abcsomeUserDataKey

aUserData.pin()オブジェクトに変更を加えた後に呼び出すという問題の回避策を発見しました。なぜこれが必要なのかはわかりませんが、より一般的にはpin()、既にピン留めされたオブジェクトに対して 2 回目の呼び出しを行うと、どのような動作が期待されるのでしょうか。

この種のセットアップのベスト プラクティスは何ですか?

4

1 に答える 1

0

I'd suggest you do upload all objects in all cases, just don't make the account available on other devices / allow user specified login details until its signed up.

Probably the easiest way to do this is to actually create a real user for the device. Generate UUIDs for the username and password and store them in the device keychain. When the user isn't signed up you always login with those details. When the user signs up you update the current user with the new details and delete the old details from the keychain.

于 2015-09-24T22:04:47.543 に答える