我正在尝试使用openWithCompletionHandler:
我遇到的问题是它在模拟器上工作正常,但是当我在iPhone 4上测试它时,完成处理程序永远不会完成。代码如下所示:
[theManagedDocument openWithCompletionHandler:^(BOOL success){
if(success) [self documentIsReady];
if(!success) NSLog(@"Couldn't Open Document");
}];
这在模拟器上工作正常,我进入documentIsReady
调用(如果错误则调用“无法打开文档”)。但是在iPhone 4上它永远不会运行CompletionHandler块。我已经在整个块中放置了断点(在两个if语句之前和之后)并且没有任何东西被调用。控制台上没有“无法打开文档”,没有调用documentIsReady
。
我还必须提一下,这似乎是我第一次在iPhone上运行该应用程序,它将正常工作。我也将其封装在带有fileExistsAtPath:
调用的if语句中。它正好进入if语句并调用openWithCompletionHandler:
,但是完成块永远不会被解雇。
我使用的是iOS 5.1和Xcode 4.3.2。
答案 0 :(得分:8)
我在使用iCloud共享数据的应用中遇到了同样的问题。我意识到openWithCompletionHandler:
只是等待,如果文档被暂停的应用程序保持打开状态,则永远不会调用完成处理程序。如果是这种情况,您应该确保在应用程序转到后台时关闭文档。
答案 1 :(得分:7)
在我的情况下,关闭我的iPad并重新启动它“修复”了这个问题。祝你好运!
答案 2 :(得分:2)
在调用之前尝试检查ManagedDocument!= nil - 这是我能想到为什么不执行该块的唯一原因。
答案 3 :(得分:0)
success
可能为假的另一个原因是您更改了模型(例如,将属性添加到实体),但未从模拟器/设备中删除应用程序以更新模型。
答案 4 :(得分:0)
对我来说,这是因为我在后台线程上调用openWithCompletionHandler:
。将其更改为从主线程调用即可修复挂起
dispatch_async(dispatch_get_main_queue(), ^{
...
[document openWithCompletionHandler:^(BOOL success) {
...
}];
});