2012-08-31 8 views
12

iCloudに保存されているUIDocumentを開く際に問題が発生することがあります。 iCloudが利用可能かどうかをチェックし、NSMetaDataQueryの結果を取得した後、私はアプリケーションの冒頭で次のコードを呼び出します。これはすべてのケースの98%で機能します。それは時々だけです(例えば、時々アプリを再インストールした後に)completionHandlerが呼び出されないことを:あなたがコードから見ることができるように、私は新しいUIDocumentインスタンス(FRNBDocument)を初期化していますiCloudが動作しなくなることがあるのはなぜですか?

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

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

、それそう古いUIDocumentがまだ開かれているので、このUIDocumentが開かない場合よりも大文字小文字を区別することはできません。

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

私は、他のアプリ(たとえば、洗練されたxTrail)に同じ問題があり、上記のトリックを実行した後にそれらを再び実行できることに気付きました。

何が起こっていますか?

+0

iCloudに添付するために使用するコードとファイルコードの残りの部分を投稿できますか?十分なコードはここにありません。 –

+0

@stackmonster私は投稿して喜んでいるだろう通常のコードを使用しますが、私は多くの助けになるとは思わない。 Appleに話をして、それはあたかもその有名なバグのように見えます。 –

答えて

3

これはiCloudバグのようです。私はAppleと連絡を取り合い、バグレポートを提出するように提案しました。それで私はやりました(id 12260670)。

ここでは、単にタイマーを実装する方法を説明します。 20秒後にUIDocsが読み込まれない場合、AlertViewが表示され、settings.app> iCloud> Documents &データに移動してから、再度電源をオンにするように指示します。

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

+1

@stackmonsterバグでない場合は、その理由を説明してください。あなたが問題を解決すれば、私はあなたに正しい答えを記入して喜んでします。ありがとう。 BTW私はこの質問のためにテクニカル・サポート・インシデントを使用しようとしました。だから、これがバグでなければ彼らがAPIを私に説明したと思います。しかし、彼らはTCIの発生率を払い戻し、代わりにバグを報告するべきだと言いました。 –

0

iCloudのアクセスが

コンテナが位置するか、またはiCloudの場合することができなかった場合は、指定ユビキタスコンテナ、またはゼロを指すURLを返す関数の呼び出し

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

を返すことが必要です現在のユーザーまたはデバイスでストレージを使用できません。

Reference

のiCloudは、その応答はないので、私はURLを取得し、データのみのさらなる同期に進んでいる場合、私は確認してください。

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
if (ubiq) 
{ 
    NSLog(@"iCloud access at %@", ubiq); 
    [self loadDocument]; 
} 
else 
{ 
    NSLog(@"No iCloud access"); 
} 
+0

私はこれが問題だとは思わない。私は有効なubiqを取得し、NSMetaDataQueryを介して結果を得ることさえできます。ただし、iCloudが停止しても、結果をロードすることはできません。あなたは[:自己 セレクター:@selector(queryDidFinishGathering :) 名:NSMetadataQueryDidFinishGatheringNotification オブジェクト:[NSNotificationCenter defaultCenter] addObserverクエリ]を使用して通知を追加することができます –

+0

。 –

+0

私はそれをすべてやった。私はコード全体を投稿することができますが、それは非常に面倒で、そのポイントの横になります。私はすべてがうまくいっていることを確認しました。それは95%の時間で動作します。場合によっては、iCloudが再生してUIDocumentをロードしないことがあります。明らかに既知の問題です。他の開発者も同じ問題を抱えていました。 –

1

私は同様の問題を抱えています。 NSMetadataQueryは結果を返しますが、openWithCompletionHandler:非常に時折完了しないため、アプリケーションのデータが読み込まれません。私は、ドキュメントをロードしようとする前に、NSMetadataUbiquitousItemIsDownloadedKeyをチェックして回避策を講じました。ダウンロードされていない場合は、evictUbiquitousItemAtURLを呼び出してから、ダウンロードを開始してください.UbiquitousItemAtURL。 NSMetadataUbiquitousItemIsDownloadedKeyがtrueになるようにNSMetadataQueryをポーリングしておく必要がありました。この時点でopenWithCompletionHandlerを正常に呼び出すことができました。これは問題を解決するように見えた。しかし、残念ながら、これはもはやiOS 6で動作しないか、またはこれ以上動作しません。よりよい回避策を見つけたり、アップルのバグに関するアップデートを入手した場合は、私たちに最新の情報を提供してください。

関連する問題