gpt4 book ai didi

ios - 关闭 QLPreviewController 崩溃 : Auto Layout still required

转载 作者:行者123 更新时间:2023-11-28 18:23:31 25 4
gpt4 key购买 nike

我正在开发一个带有 SplitViewController 的 iPad 应用程序。在我的 DetailViewController 中,有一个按钮用于呈现 QLPreviewController 并显示文档。到目前为止一切正常,但是,当我使用左上角的 Done 按钮关闭预览 Controller 时,应用程序抛出异常并出现以下错误:

*** Assertion failure in -[UIView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2380.17/UIView.m:5781
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after sending -viewDidLayoutSubviews to the view controller. DetailViewController's implementation needs to send -layoutSubviews to the view to invoke auto layout.'
*** First throw call stack: (...)
libc++abi.dylib: terminate called throwing an exception

下面是我如何实现 QLPreviewController 及其委托(delegate)方法的呈现:

- (IBAction)previewButtonPressed:(id)sender
{
QLPreviewController *ql = [[QLPreviewController alloc] init];
ql.dataSource = self;
ql.delegate = self;
ql.currentPreviewItemIndex = 0;
[self presentViewController:ql animated:YES completion:NULL];
}

- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
return [NSURL fileURLWithPath:self.documentFilePath];
}

- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
{
return 1;
}

viewDidLayoutSubviews:

- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
[self.scrollView setContentSize:self.gridView.frame.size]; // if not called, the contentSize of UIScrollView is wrong.
}

DetailViewController 包含一个 UIScrollView 并且它有一个自定义的 UIView (gridView) 作为 subview ,gridView 有很多 subview 。

在测试时,我注释掉了 viewDidLayoutSubviews 中设置内容大小的代码行,这样我就可以成功关闭预览 Controller 。但是,这仅在我将 gridView 作为 subview 添加到 scrollView 之前有效。将其添加为 subview 后,它在解雇时再次崩溃。这次我得到了 EXC_BREAKPOINT 错误并且没有在控制台上登录。调试器的输出如下:

CoreFoundation`CFHash:
0x4597740: pushl %ebp
0x4597741: movl %esp, %ebp
0x4597743: pushl %edi
0x4597744: pushl %esi
0x4597745: subl $16, %esp
0x4597748: calll 0x459774d ; CFHash + 13
0x459774d: popl %edi
0x459774e: movl 8(%ebp), %esi
0x4597751: testl %esi, %esi
0x4597753: jne 0x459776b ; CFHash + 43
0x4597755: int3
0x4597756: calll 0x46eca00 ; symbol stub for: getpid <- EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
0x459775b: movl %eax, (%esp)
0x459775e: movl $9, 4(%esp)
0x4597766: calll 0x46eca4e ; symbol stub for: kill
...

请注意,该应用程序以 iOS 6 为目标并使用自动布局。

不知道有没有人能帮我解决这个问题。提前致谢。

最佳答案

在您的 viewDidLayoutSubviews 实现中,执行错误消息告诉您的操作:调用 [self.view layoutSubviews]。看看是否有帮助。

编辑:我在上一段中的建议可能是调用layoutIfNeeded而不是layoutSubviews

尝试另一件事,如果这不起作用:将整个内容大小设置移动到 viewWillLayoutSubviews 而不是在 viewDidLayoutSubviews 中进行。

关于ios - 关闭 QLPreviewController 崩溃 : Auto Layout still required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15846325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com