12

iCloudに保存されているUIDocumentを開くときに問題が発生することがあります。iCloudが利用可能かどうかを確認し、NSMetaDataQueryの結果を取得した後、アプリの最初に次のコードを呼び出します。これは、すべてのケースの98%で機能します。たまに(たとえば、アプリを再インストールした後)、completionHandlerが呼び出されないことがあります。

FRNBDocument *doc = [[FRNBDocument alloc] initWithFileURL:fileURL];
[doc openWithCompletionHandler:^(BOOL success) {

    NSLog(@"... doc: openedWithCompletionHandler");

コードからわかるように、新しいUIDocumentインスタンス(FRNBDocument)を初期化しているので、古いUIDocumentがまだ開いているため、これが開かない場合があります。

アプリを再び動作させる唯一の方法は、アプリを強制終了してから、settings.app> iCloud> Documents&Dataに移動し、オフにしてから再度オンにすることです。アプリに戻ると、UIDocsは問題なくロードされます。

他のアプリ(たとえば、sophiesticationによるxTrail)にも同じ問題があり、上記のトリックを実行した後にのみ、それらを再度実行できることに気付きました。

何が起こっている?

4

3 に答える 3

3

OK、これはiCloudのバグのようです。私はAppleと連絡を取り合っており、彼らはバグレポートを提出することを提案しました。そして私はそうしました(id12260670)。

ここで行うのは、単純にタイマーを実装することです。UIDocsが20秒経過しても読み込まれない場合は、AlertViewを表示して、settings.app> iCloud> Documents&Dataに移動し、オフにしてから再度オンにするようにユーザーに指示します。

これはとてもイライラします。信じられない。

于 2012-09-08T09:52:45.503 に答える
1

私も同様の問題を抱えています。NSMetadataQueryは結果を返しますが、openWithCompletionHandler:が完了しないことが非常にまれであるため、アプリのデータが読み込まれません。しばらくの間、ドキュメントをロードする前にNSMetadataUbiquitousItemIsDownloadedKeyをチェックすることで回避策がありました。ダウンロードされていない場合は、evictUbiquitousItemAtURLを呼び出してから、DownloadingUbiquitousItemAtURLを開始します。次に、NSMetadataUbiquitousItemIsDownloadedKeyがtrueになるように、NSMetadataQueryを使用してポーリングを続ける必要がありました。その時点で、openWithCompletionHandlerを正常に呼び出すことができました。これで問題が解決したようです。ただし、イライラすることに、これはiOS 6で機能しなくなったか、常に機能しなくなったように見えます。より良い回避策を見つけた場合、またはAppleからバグの最新情報を入手した場合は、最新情報を入手してください。

于 2012-10-11T17:04:07.833 に答える
0

iCloudアクセスには関数の呼び出しを返す必要があります

- (NSURL *)URLForUbiquityContainerIdentifier:(NSString *)containerID

これは

指定されたユビキタスコンテナを指すURL 。コンテナが見つからなかった場合、または現在のユーザーまたはデバイスでiCloudストレージを利用できない場合はnil 。

参照

iCloudはそれほど応答性がないので、URLを取得したかどうかを確認してから、データのさらなる同期に進むだけです。

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq) 
{
    NSLog(@"iCloud access at %@", ubiq);
    [self loadDocument];
} 
else 
{
    NSLog(@"No iCloud access");
}
于 2012-09-09T12:38:21.150 に答える