Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UIDocument openWithCompletionHandler未在iOS设备上完成_Ios_Iphone_Cocoa Touch_Objective C Blocks_Uimanageddocument - Fatal编程技术网

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。我根本没有得到任何回报。