【问题标题】:UIDocument openWithCompletionHandler: crashUIDocument openWithCompletionHandler:崩溃
【发布时间】:2012-08-09 14:36:28
【问题描述】:

我在我的项目中使用 Core Data,但在以下代码部分中遇到了罕见的崩溃

 -(void) useDocument{
     AFFormsCoreDataEngine* engine = [AFFormsCoreDataEngine sharedInstance];
     if (![[NSFileManager defaultManager] fileExistsAtPath: [engine.formsDatabase.fileURL path]])
     {
         [engine.formsDatabase saveToURL: engine.formsDatabase.fileURL forSaveOperation: UIDocumentSaveForCreating completionHandler: ^(BOOL success){
            // setup
         }];
    }
    else if (engine.formsDatabase.documentState == UIDocumentStateClosed)
    {
        [engine.formsDatabase openWithCompletionHandler: ^(BOOL success){
             // setup
        }];
    }
    else if (engine.formsDatabase.documentState == UIDocumentStateNormal)
    {
         // setup
    }
}

崩溃日志是这样写的:

Last Exception Backtrace:
0   CoreFoundation                  0x371fd88f __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x31272259 objc_exception_throw + 33
2   CoreFoundation                  0x371fd789 +[NSException raise:format:] + 1
3   Foundation                      0x32ce83a3 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 91
4   UIKit                           0x306b3149 -[UIDocument openWithCompletionHandler:] + 173
5   EETECH                          0x00014d23 -[AFFormListViewController useDocument] (AFFormListViewController.m:150)

谁能帮我解决这个问题?这种情况很少发生,但仍然很不愉快

【问题讨论】:

  • 抛出了什么异常?捕获并记录异常,或者为异常源设置断点(单击异常窗格底部的 + 并添加异常源)。这将为您提供引发异常的原因。
  • 我使用异常断点。为了让事情更清楚,我自己从来没有发现过这个异常,但是一些用户向我提供了崩溃日志。是否可以在其他用户的设备上记录异常?

标签: ios core-data crash uidocument


【解决方案1】:

好吧,UIDocument 代码中的断言失败。您可能应该提供更多代码,因为您显然设置不正确。

断言然后抛出异常。如果您在此方法中@catch 异常,则可以记录该异常。

或者,您可以将自己的 NSAssertionHandler 分配给线程,并直接查看断言。

【讨论】:

    【解决方案2】:

    如果您的应用尝试连续两次调用您的 useDocument 方法,则会发生错误。

    由于openWithCompletionHandler: 异步打开文档,再次调用该方法时,文档可能还在打开中。

    如果发生这种情况,您的应用最终会尝试打开文档两次(因为文档状态将保持 UIDocumentStateClosed 直到完成),这会导致引发异常。

    如果您有异常断点,您可能会在控制台中看到类似这样的内容:

     *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to open or a revert document that already has an open or revert operation in flight:
    

    【讨论】:

    • 如何解决这个崩溃?我也有同样的问题。
    • 这个“答案”只是更详细地解释了问题,但根本没有提供任何答案。
    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多