1

アプリの1つからiCloudにファイルをプッシュしようとしていますが、ファイルがすでにiCloudにあるかどうかを追跡する方法がない場合があります。ファイルをユビキタスとしてマークした後、NSMetadataQueryを介してファイルのステータスを定期的にチェックするメソッドがあります。結果が返ってきたら、ファイルのステータスに次のキーを使用します。

NSNumber *isUploaded = [file valueForAttribute:NSMetadataUbiquitousItemIsUploadedKey];
NSNumber *isUploading = [file valueForAttribute:NSMetadataUbiquitousItemIsUploadingKey];
NSNumber *uploadPercent = [file valueForAttribute:NSMetadataUbiquitousItemPercentUploadedKey];

これは機能する場合もありますが、isUploaded値が0で、isUploading値も0である場合もあります。uploadPercent値は実際には常に0です。デバイスの「設定」アプリに移動してアプリのファイルを確認すると、ファイルはすでにそこにリストされているので、「NSMetadataUbiquitousItemIsUploadedKey」キーが0を返す理由がわかりません。

どんな助けでも大歓迎です!ありがとう!

4

1 に答える 1

5

私は同じことをしようとしています。iCloud ガイドに従って、NSMetadataUbiquitousItemIsUploadedKey の代わりに NSURLUbiquitousItemIsUploadedKey を試してください。それがうまくいくかどうか教えてください。私はまだこれを機能させることができませんでした。ガイドのセクションは次のとおりです。

ファイルまたはディレクトリの転送ステータスの確認

iCloud コンテナ ディレクトリに書き込んだアイテムは、できるだけ早く iCloud サーバーに自動的に転送されます。ただし、ネットワークとデバイスの種類によっては、ファイルがサーバーにすぐにアップロードされないか、デバイスにダウンロードされない場合があります。ファイルの状態を知る必要がある場合は、 のgetResourceValue:forKey:error:メソッドを使用しNSURLて、次の属性のいずれかの値を取得できます。

  • NSURLIsUbiquitousItemKey— 項目が iCloud に保存されているかどうかを示します。

  • NSURLUbiquitousItemIsDownloadedKey- アイテムの現在のバージョンがダウンロードされ、アクセス可能かどうかを示します。

  • NSURLUbiquitousItemIsDownloadingKey- アイテムの現在のバージョンがダウンロード中で、まだ利用できないかどうかを示します。

  • NSURLUbiquitousItemPercentDownloadedKey- ダウンロード中のアイテムについて、既にダウンロードされた変更の割合を示します。この値を使用して進行状況バーを更新できます。

  • NSURLUbiquitousItemIsUploadedKey— ローカルで行われた変更が iCloud サーバーに正常にアップロードされたことを示します。

  • NSURLUbiquitousItemIsUploadingKey— ローカルで行われた変更が現在 iCloud サーバーにアップロードされていることを示します。

  • NSURLUbiquitousItemPercentUploadedKey- アップロード中のアイテムについて、サーバーにすでにアップロードされている変更の割合を示します。

  • iCloud サーバーはアプリがローカルで行った変更を積極的にプルしますが、iOS デバイスは通常、ファイルにアクセスしようとするまでサーバーから変更をプルしません。現在ダウンロード中のファイルを開こうとすると、ファイルがダウンロードされて使用可能になるまで、iOS はオープン要求を発行したスレッドをブロックします。したがって、潜在的な遅延が懸念される場合は、必要に応じてファイルの現在の状態を確認し、場合によってはユーザー インターフェイスを更新して、ファイルがまだ利用できないか、現在ダウンロード中であることを反映してください。

    URL に対して要求できる属性の詳細については、「NSURL クラス リファレンス」を参照してください。

    于 2012-06-11T01:21:16.303 に答える