2

当 UIDocument 关闭时,它可以再次关闭吗?即使重新打开后它的documentState是UIDocumentStateNormal?

请帮我。非常感谢!

[document openWithCompletionHandler:^(BOOL success) {
    if (success) {

        [document closeWithCompletionHandler:^(BOOL success) {
            if (success) {

                [document openWithCompletionHandler:^(BOOL success) {
                    if (success) {

                        NSLog(@"%d", document.documentState);

                        //Exception
                        [document closeWithCompletionHandler:^(BOOL success) {
                            if (success) {
                            } 
                        }];
                    } 
                }];
            } 
        }];
    } 
}];

当在“异常”标记处调用 closeWithCompletionHandler 时,会引发异常:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'closeWithCompletionHandler called while document is already closing'
4

4 回答 4

1

似乎每次实例化只能关闭一次 UIManagedDocument 。

我遇到了这个问题,并通过创建一个具有相同数据的新文档(使用自定义 initWith... 方法)而不是重新打开同一个文档来解决它。

然后您可以“重新关闭”文档的新实例。

请记住,文档的新实例将具有新的托管对象上下文,因此您可能不应该尝试使用原始文档中的托管对象。如果需要,在新实例中重新获取它们。

于 2012-03-28T21:28:42.677 回答
1

我有同样的问题,删除第二次关闭为我解决了这个问题。我发现只要我使用单独的 UIManagedDocument 实例进行第二次打开/关闭,我就不会收到此错误。

另外,我发现我在以前的代码中没有得到一致的错误。

于 2012-04-24T16:18:22.487 回答
0

closeWithCompletionHandler请注意,当您调用第二个方法时,您仍在第一个方法中。通过阅读似乎是原因的异常。

于 2012-03-05T09:24:44.260 回答
0

打开和关闭文档是一个异步活动(意味着它在后台的另一个线程上执行)。通过如此接近彼此的打开和关闭,您正在超越另一个过程。在执行下一步(打开或关闭)之前,确保其他线程已完成。

于 2013-07-07T14:11:04.573 回答