UIDocument openWithCompletionHandler未在iOS设备上完成
我正在尝试使用UIDocument openWithCompletionHandler未在iOS设备上完成,ios,iphone,cocoa-touch,objective-c-blocks,uimanageddocument,Ios,Iphone,Cocoa Touch,Objective C Blocks,Uimanageddocument,我正在尝试使用openWithCompletionHandler: 我遇到的问题是,它在模拟器上运行良好,但当我在iPhone4上测试它时,完成处理程序永远不会完成。代码如下所示: [theManagedDocument openWithCompletionHandler:^(BOOL success){ if(success) [self documentIsReady]; if(!success) NSLog(@"Couldn't Open Document"); }];
openWithCompletionHandler:
我遇到的问题是,它在模拟器上运行良好,但当我在iPhone4上测试它时,完成处理程序永远不会完成。代码如下所示:
[theManagedDocument openWithCompletionHandler:^(BOOL success){
if(success) [self documentIsReady];
if(!success) NSLog(@"Couldn't Open Document");
}];
这在模拟器上运行良好,我可以调用documentIsReady
调用(如果出现错误,则调用“无法打开文档”)。但在iPhone4上,它从不运行CompletionHandler块。我已经在整个块中放置了断点(在两个if语句之前和之后),没有调用任何东西。控制台上没有“无法打开文档”,没有调用documentIsReady
我还必须提到,这似乎是我第一次在iPhone上运行应用程序,它会正常工作。我还将其封装在带有fileExistsAtPath:
调用的if语句中。它很好地进入if语句并调用openWithCompletionHandler:
,但是完成块永远不会被触发
我正在使用iOS 5.1和Xcode 4.3.2。请尝试检查ManagedDocument!=在调用之前为零-这是我能想到为什么块不会被执行的唯一原因。在我的情况下,关闭我的iPad并重新启动它“修复”了这个问题。祝你好运 我在使用iCloud共享数据的应用程序中也遇到过同样的问题。我意识到,
openWithCompletionHandler:
只是等待,如果文档被挂起的应用程序打开,就不会调用完成处理程序。如果您是这样,您应该确保在应用程序转到后台时关闭文档。成功的另一个原因可能是您更改了模型(例如为实体添加了属性)但没有从模拟器/设备中删除应用程序以更新模型。对我来说,这是因为我在后台线程上调用了openWithCompletionHandler:
。将其更改为从主线程调用修复了挂起
dispatch_async(dispatch_get_main_queue(), ^{
...
[document openWithCompletionHandler:^(BOOL success) {
...
}];
});
我清除了应用程序,重新启动了所有程序,它似乎做得更好。比这个答案多一点,但这已经足够接近了。仍然不确定是什么原因造成的。奇怪的是,重启设备修复错误的频率有多高。如果我忘记从完成处理程序中释放自定义UIDocument类实例,我也经历了基本相同的行为。当我第二次尝试调用openWithCompletionHandler时,它会保持打开状态并挂起。@vargonian这很有意义。。。除此之外,ARC(处理内存)也会出现此问题。可能,但我没有将
success
视为false。我根本没有得到任何回报。