私のアプリでは、ユーザーは消耗品を購入します。スーツケースはCore Dataに保存されています。ユーザーが最初にアプリをインストールするとき、私は彼らに始めるための無料サービスを提供します。少なくとも1つのスーツケースが設定されていなければ、アプリは機能しません。iCloudを使用すると、ユーザーはアプリ内消耗品を「盗む」ことができます
しかし、ユーザーが自分のiPhoneにiPadをインストールし、iPadを同期して2台を同期させると、2つのスーツケースが追加されます。そして、いずれかのデバイスでアプリをアンインストールしてから再インストールして同期すると、余分なものが得られ、無期限に実行できるようになります。
私は2つのソリューションを見ることができ、それらのどれも思えるん:ユーザーは最初のiCloudと同期するとき
はNSUbiquityKeyValueStoreに値を追加します。最初の起動時にこの値を確認してください。それがない場合は、データを同期させてください。しかし、これは問題を作り出します。ユーザーがiCloudを無効にした場合、または初回起動時にインターネットに接続していない場合はどうなりますか?アプリはフリーズを作成し、iCloudが利用可能になったら、複製を同期させ、好きなだけ何度でもこれを行うことができます。
いずれの場合も、各アプリのデフォルトの項目と一致します。私はオブジェクトIDやタイムスタンプにマッチするアイデアを持っていましたが、これらは様々で、どのように扱うべきかわかりません。
私はこれについて何かできることは誰も知っていますか?
EDIT:パッケージ化されたデータベースに加えmigratePersistentStoreを使用して
:toURL:オプション:withType:エラー:移動するための方法のようです。それが私のために働くなら、コードで答えを投稿します。
たぶん、あなたの例では、単に混乱ですが、彼らは既に持っている場合は、なぜ彼らに無料のスーツケースを与えないだけで決してありませんか?あなたは、スーツケースなしではアプリが機能しないと言うでしょう。あなたが以前にスーツケースを持っていて、それを消費したら、それが機能することを意味しますか? –
@chrispix例を非常に抽象的にして申し訳ありません。基本的に、あなたはスーツケースを「消費する」ことはしません。あなたはあなたが好きな数だけ購入し、それらを蓄積します。それは無制限なので、「消耗品」モデルですが、購入時に商品が実際に「消費される」というわけではありません。これは主な違いです。 – ntesler
私は見ると思います。ユーザーが再インストールしてスーツケースがないので、あなたはそれらを1つ与えます。その後、彼らはあなたのサーバーから以前のスーツケースをプルダウンできるいくつかの資格情報を入力しますか? –