我有时打开存储在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)有同样的问题,我只能在完成上述技巧后再次运行它们。
发生了什么事?
答案 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 。
由于iCloud没有响应,我检查是否获得了网址,然后才进一步同步数据。
NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq)
{
NSLog(@"iCloud access at %@", ubiq);
[self loadDocument];
}
else
{
NSLog(@"No iCloud access");
}