为什么iCloud有时会停止工作?

时间:2012-08-31 16:29:51

标签: iphone ios icloud uidocument

我有时打开存储在iCloud上的UIDocuments有问题。在检查iCloud是否可用并获取NSMetaDataQuery的结果后,我在应用程序的最开始时调用以下代码。这适用于所有情况的98%。有时(例如,有时在重新安装应用程序之后)永远不会调用completionHandler:

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

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

正如您从代码中看到的那样,我正在初始化一个新的UIDocument实例(FRNBDocument),因此不会出现旧的UIDocument仍然打开的情况,因此无法打开。

让应用再次运行的唯一方法是杀死它,然后转到settings.app> iCloud>文件&数据并将其关闭然后再将其打开。当我回到应用程序时,UIDocs将被加载没有问题。

我注意到其他应用程序(例如xophil by sophiestication)有同样的问题,我只能在完成上述技巧后再次运行它们。

发生了什么事?

3 个答案:

答案 0 :(得分:3)

好的,这似乎是一个iCloud错误。我一直与Apple联系,他们建议提交错误报告。所以我做了(id 12260670)。

我现在要做的是简单地实现一个计时器。如果UIDocs在20秒后没有加载,我将显示一个AlertView,告诉用户转到settings.app> iCloud>文件&数据然后将其关闭然后再将其打开。

这太令人沮丧了。难以置信的。

答案 1 :(得分:1)

我遇到了类似的问题。 NSMetadataQuery返回结果但openWithCompletionHandler:偶尔不会完成,因此应用程序的数据不会加载。有一段时间我通过在尝试加载文档之前检查NSMetadataUbiquitousItemIsDownloadedKey来解决方法。如果没有下载,我调用evictUbiquitousItemAtURL然后startDownloadingUbiquitousItemAtURL。然后,我必须继续使用NSMetadataQuery进行轮询,以使NSMetadataUbiquitousItemIsDownloadedKey为真,此时我可以成功调用openWithCompletionHandler。这似乎解决了这个问题。但令人沮丧的是,这似乎不再适用于iOS 6,或者不再适用于所有时间。如果您找到更好的解决方法或从Apple获取有关该错误的更新,请随时向我们提供更新。

答案 2 :(得分:0)

iCloud访问需要返回调用函数

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

返回

  

指向指定的普遍容器的URL,如果找不到容器,或者当前用户或设备的iCloud存储不可用,则 nil

Reference

由于iCloud没有响应,我检查是否获得了网址,然后才进一步同步数据。

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