を使用してiPadアプリに取り組んでいSplitViewController
ます。私DetailViewController
の には、ドキュメントを提示して表示するために使用されるボタンがありQLPreviewController
ます。Done
これまでのところすべて正常に動作していますが、左上のボタンを使用してプレビュー コントローラーを閉じると、アプリは次のエラーで例外をスローします。
*** 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
とそのデリゲート メソッドを実装する方法は次のとおりです。
- (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) があり、gridView には多くのサブビューがあります。
テスト中に、コンテンツ サイズを から設定するコード行をコメント アウトしたところviewDidLayoutSubviews
、プレビュー コントローラーを正常に閉じることができました。ただし、これgridView
はサブビューとして に追加する前にのみ機能しscrollView
ます。サブビューとして追加した後、閉じると再びクラッシュします。今回は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 をターゲットにしており、自動レイアウトを使用しています。
誰かがこの問題を解決するのを手伝ってくれるのだろうか. 前もって感謝します。