UIDocument 相关 EXC_BAD_ACCESS

Posted

技术标签:

【中文标题】UIDocument 相关 EXC_BAD_ACCESS【英文标题】:UIDocument related EXC_BAD_ACCESS 【发布时间】:2012-08-06 06:46:47 【问题描述】:

在我的应用程序的最开始,我尝试加载每个 UIDocument 以稍微预览它们的内容。这在大多数情况下都非常有效,但有时我在加载 UIDocument 后会立即崩溃。我的问题是我不知道如何解释崩溃。我什至不确定它是否与 UIDocument 的处理有关(线程 6 和 7 与 UIDoc 有关,但线程 8 似乎导致了崩溃)。

如果有人能帮我解释一下,我将非常感激:

我在所有异常上都设置了断点,但调试器不会停在特定的代码行。

【问题讨论】:

控制台的错误是什么,您能否验证您是否成功打开了您的UIDocument? (很多操作都是异步的) @iBlue 控制台中根本没有输出。 UIDoc 未成功打开,即我在 openWithCompletionHandler:^(BOOL success) 的成功块中拥有的内容未执行。之前就崩溃了。所以我想我提供的崩溃屏幕截图并没有真正说明错误来源,是吗? @n.evermind,我也有类似的问题...你能告诉我们你是如何解决的吗?这对我很有帮助。 【参考方案1】:

我遇到了同样的问题。仅在我们的一个测试设备上很容易重现,读取 iCloud 文档。重新安装应用程序不会影响该错误。

我使用 NSMetadataQuery 来获取文件 URL。我的 NSMetadataQueryDidFinishGatheringNotification 接收器如下所示:

- (void)queryDidFinishGathering:(NSNotification *)notification

    NSMetadataQuery *query = [notification object];
    [query disableUpdates];
    [query stopQuery]; //  <--- This was the problem

    NSMetadataItem *item = [query resultAtIndex:0];
    NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];
    UIDocument *doc = [[CustomDocument alloc] initWithFileURL:url];
    [doc openWithCompletionHandler:^(BOOL success) 
         // EXC_BAD_ACCESS before completion block is called :'(
    ];

    [query enableUpdates];

删除stopQuery 电话修复了所有问题!

【讨论】:

以上是关于UIDocument 相关 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 UIDocument 数据

同步打开 UIDocument

为啥加载 UIDocument 需要 40 秒?

autosaveWithCompletionHandler:(UIDocument)覆盖问题

如何在主队列上加载 UIDocument?

UIDocument 无法再次关闭?