2

iCloud を使用して、iOS 上のデバイス間で特定のドキュメント (UIDocument) を同期しています。私の実装は現在機能していますが、ファイルの更新がどのように機能するかについて頭を悩ませています。これは私の実装が現在どのように機能するかです:

  1. UIDocument サブクラスのインスタンスを作成し、ローカルに保存します。

    [UIDocument saveToURL]

  2. ファイルをiCloudに送信します

    [NSFileManager setUbiquitous]

これらの手順により、ドキュメントが iCloud に送信され、他のデバイスでファイルを表示できるようになりました。私の質問は、ファイルを更新する方法ですか? 新しい UIDocument オブジェクトを作成して保存し、上記のように Ubiquitous を設定する必要がありますか? [UIDocument saveToURL] の保存操作として UIDocumentSaveForOverwriting でこれを試しましたが、setUbiquitous 呼び出しは失敗します。また、単純にローカル ファイルを保存して、他のデバイスでメタデータ クエリの更新通知を監視しようとしましたが、何も受信しません。UIDocument を更新して、その変更を iCloud に反映するにはどうすればよいですか?

4

1 に答える 1

3

setUbiquitous 呼び出しは 1 回だけ行う必要があります。これは、ファイルをローカル ストアからユビキタス コンテナー (iOS がファイルをクラウドと同期するために使用するもの) にコピーするだけです。その時点からファイルを開くか保存するために使用する URL ([UIDocument saveToURL] のように) は、ユビキタス コンテナーに存在するファイルの URL である必要があります。

次のようなコードを使用して、ユビキタス コンテナーの場所を取得できます。

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{
        myobj.containerURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];

    });

Apple docs によると、MetaDataQuery を使用して URL の場所を取得することになっています (明らかに、URL はさまざまなイベントに基づいて変更される可能性があるため)。この例は、このリンゴのサンプルにあります。

幸運を。:) 私は数日間、このようなものに苦労してきました...

于 2012-10-22T23:38:08.730 に答える