2012-01-17 8 views
20

私は既存のコアデータアプリケーションをiCloudと連携させることができました。研究の日の後、それは実際には驚くほど簡単でした。 3つの事が不可欠であると思わ:コアデータiCloudマージプロトコル

  • 、「Summary]ペイン」を選択資格ファイル(最近のXcodeで、これはターゲットを選択して使用して行うことができますが、追加スクロールダウンし、資格を有効にチェックするために、」

  • persistenストアを追加しながら
  • は、私の場合には、適切なオプションを追加し

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
        // other options 
        @"<arbitrary name>", NSPersistentStoreUbiquitousContentNameKey, 
        iCloudURL, NSPersistentStoreUbiquitousContentURLKey, 
        nil] 
    

    NSURL * iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
    

ここで `nil 'は、Entitlements.plistファイルの情報が使用されていることを示します。

  • デベロッパーポータルを通じてiCloudのサポートをアプリに許可します。これには、前にやっていなかった独自のapp-IDを生成する必要があります。

実際には、この最後のステップが開発のために重要であるとは私は確信していません---私はこの最後のステップなしで別のアプリを有効にしており、動作するようです。

私は、異なるiDevices上の同じアプリケーションの2つの既存のコアデータベースが新しいエントリをコアデータスタックに同期させることに気づきましたが、既存のレコードは自動的には同期されません。

デバイスAからBへのデータを同期させる方法の1つは、B上の既存のコアデータデータベースを削除して、Bでアプリを再起動することです。ただし、これは適切なマージではありません。

アプリがiCloudサポートを使用するようにアップグレードされた瞬間に、2つの既存のコアデータデータベースを異なるアプリにマージする方法を知っている人は誰ですか?

おかげ

+0

@steipeteで)多分あなたはこれと同様の問題 に助けを見つけることができますhttp://stackoverflow.com/questions/6588180/can-you-sync-coredata-with-icloud –

+0

ここをクリックしてください - https://devforums.apple.com/thread/126670 –

+0

いいえ、レシピアプリに便利なコードが含まれています(そのうち、バックグラウンドで永続的ストアコーディネータにストアを追加する---大きなコアデータをマージするときに便利ですデータベース)では、2つの異なるデバイス上に2つの既存のコアデータインスタンスをマージするという問題に対処していません。私は何とかトランザクションログを再生する方法を探していました。 – davidav

答えて

1

私はそれを行っていないが、iCloud上に保存するときのデータも更新または別のデバイス上に存在している場合には情報が競合のリスクが高いがあります。競合が適切に解決されない場合、2つのデバイス間のフローは適切に発生しません。競合を解決することは複雑になる可能性がありますが、最も単純なのは最新の勝利を放棄することだけです。アップルは、競合を処理する手続きを持っているため、保存してユビキタスストアに上書きすると競合が発生したときにトリガされます。

+0

コアデータのiCloud実装は実際には非常に優れていますが、通常はあまりに多くの競合で実行されません。おそらく、2つの異なるインスタンスで同じレコードを編集している場合、おそらく最後に保存されたレコードが最終的に勝つでしょう。 – davidav

2

たぶんこのことができます:https://gist.github.com/1475162

+1

私はこのリンクがUIDocumentベースの同期のためのものだと信じています。質問はCore Dataの同期について質問しています。 – kurtzmarc

関連する問題