2012-03-08 6 views
2

iCloudデーモンは、デバイスがオンラインのときに変更が加えられると、数秒で変更をiCloudサーバーにアップロードするようです。しかし、変更がローカルのiCloudコンテナにオフラインで行われ、その後デバイスがオンラインになると、iCloudデーモンは変更をアップロードするときに矛盾します。接続を再確立した後、変更がiCloudサーバーにアップロードされて他のデバイスによって検出されるまでに数秒から30分の遅延が発生しました。これは正常ですか? iCloudデーモンにアップロードを強制する方法はありますか?iCloudデーモンがオフラインで行われた変更をアップロードするのが遅い

私はUIDocumentのサブクラス(iCloudコンテナにファイルを作成、オープン、変更、保存)とNSMetadataQueryを使用して変更を検出します。オンラインに戻った後、キーNSURLUbiquitousItemIsUploadedKeyのファイルステータスはfalseで、長時間その状態を維持することができます。私はファイルを再保存してiCloudデーモンに変更をアップロードさせようとしましたが、それは役に立たないようです。

+0

私は似たようなものを見ています。私の場合、変更がオフラインになったかどうかは関係ありません。私はちょうどNSURLUbiquitousItemIsUploadedKeyが長期間FALSEのままでいる状態になります。デバイスを再起動すると、変更がアップロードされます。しかし、これ以上の変更は、iCloudにプッシュされることはありません。 他の時には、同じコードがすぐに変更をアップロードします。 – Poulsbo

答えて

0

私はこれが古いものだと知っていますが、私は長い間この問題に苦しんでいて、たった今発見したばかりなので、他の誰かがこのスレッドを渡ります。

あなたは私はあなたがNSURLUbiquitousItemIsUploadedKeyを使用して言及したので、あなたはファイルが明らかに非常に特定の状況下で NSURL キャッシュするためのリソース値をアップロードしていない見ることができます推測NSURLのgetResourceValue:forKey:error:メソッドを使用する場合。

メインドキュメント内のどこにでも言及

ない、しかし、あなたがNSURL.hに飛び込むならば、あなたは意味合いがで沈むようにする、フルで読む価値がある、次の奇妙な言い回し宝石、見つける:

行動をリソース値キャッシングの数は、 のNSURLとCFURL APIでは若干異なります。取得NSURL方法は、設定、またはキャッシュされたリソースを使用し、メインスレッドから使​​用されている 値

、(一時的なプロパティとして追加ものを除く)URL によってキャッシュされたリソースの値は、次の 時に無効化されているメインスレッドのループを実行します。

CFURL関数はURLによってキャッシュされたリソース値 を自動的に消去しません。クライアントはキャッシュ の完全な制御権を持っています。 CFURL APIを使用している場合は、 CFURLClearResourcePropertyCacheForKeyまたは CFURLClearResourcePropertyCacheを使用して、キャッシュされたリソース値をクリアする必要があります。

特定のリソースキーによって識別されるリソース値を返します。この メソッドは、URLオブジェクトがすでにリソース の値をキャッシュしているかどうかをチェックします。存在する場合、キャッシュされたリソース値を呼び出し側に返します。 でない場合、このメソッドはリソース値を バッキングストアから同期取得し、リソース値をURLオブジェクトのキャッシュ に追加し、リソース値を呼び出し側に返します。リソース のタイプは、リソースプロパティによって異なります(リソースキー定義を参照)。 このメソッドでYESが返され、値にnilが設定されている場合は、指定されたリソースに対して リソースプロパティが使用できないことを意味し、 がリソースプロパティではないと判断するとエラーが発生しませんでした。このメソッドがNOを返す場合、オプションのエラーが設定されます。 このメソッドは現在、ファイルシステム リソースのURLにのみ適用されます。シンボルはiOS 4には存在しますが、操作は実行されません。あなたがgetResourceValueを使用する場合

基本的には、:メインスレッド以外のスレッドでは、最初の結果をキャッシュします、そしてあなたに再び時間と時間をこれと同じ結果を返します。直感的な、ええ?あなたが考えているのは、ヘッダーに埋め込まれているのではなく、文書の大きな太字のタイプにフラグが立てられていると思います...

私にとって、これは、特定のURLが '実際にそれがあったときには、何年も前にダウンロードしていました。アプリを頻繁にリニューアルするとが表示され、問題を解決するためにが表示されます。 getResourceValue:forKey:error:を強制的にメインスレッドでのみ実行させると、最終的にはこの打ちのめさを打ち負かすことになりました。

関連する問題