为什么iCloud有时会停止工作



我有时在打开存储在iCloud上的UIDocuments时遇到问题。在检查iCloud是否可用并获得NSMetaDataQuery的结果后,我在应用程序的一开始就调用了以下代码。这在98%的情况下都有效。只是有时(例如,有时在重新安装应用程序后)完成处理程序永远不会被调用:

FRNBDocument *doc = [[FRNBDocument alloc] initWithFileURL:fileURL];
[doc openWithCompletionHandler:^(BOOL success) {
    NSLog(@"... doc: openedWithCompletionHandler");

正如你从代码中看到的,我正在初始化一个新的UIDocument实例(FRNBDocument),所以不可能是旧的UIDocument仍然打开,因此这个无法打开。

让应用程序重新工作的唯一方法是杀死它,然后转到设置。app>iCloud>Documents&数据并将其关闭,然后再次打开。当我回到应用程序时,UIDocs将被加载而不会出现问题。

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

发生了什么事?

好吧,这似乎是一个iCloud错误。我已经和苹果公司取得了联系,他们建议我提交一份错误报告。我就这么做了(id 12260670)。

我现在要做的就是简单地实现一个定时器。如果UIDocs在20秒后仍未加载,我会显示AlertView,告诉用户转到设置。app>iCloud>Documents&数据并将其关闭,然后再次打开。

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

我也遇到了类似的问题。NSMetadataQuery返回一个结果,但openWithCompletionHandler:偶尔不会完成,因此应用程序的数据不会加载。有一段时间,我有一个变通办法,在尝试加载文档之前检查NSMetadataUbiquitousItemIsDownloadedKey。如果它没有下载,我调用了rejectUbiquitousItemAtURL,然后启动DownloadingUbiquitous ItemAtURL。然后,我不得不继续使用NSMetadataQuery轮询NSMetadataUbiquitousItemIsDownloadedKey,使其为true,此时我可以成功调用openWithCompletionHandler。这似乎解决了问题。然而,令人沮丧的是,这似乎要么在iOS 6中不再工作,要么不再一直工作。如果您找到更好的解决方法或从苹果获得有关该错误的更新,请随时向我们更新。

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");
}

最新更新