Po migracji mojego kodu do Swift 3. napotkam problem. Domyślam się, że iOS10 podnosi teraz nowe problemy i faktycznie nie jest związany z samym Swift.Swift UIViewReportBrokenSuperview Przyczyna wywołania przez manipulację warstwami
Błąd:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'View has lost track of its superview, most likely through unsupported use of CALayer API on the view's layer. If this isn't a crash yet, it will be in the near future.
Problem view: <UIToolbar: 0x102552d80; frame = (0 0; 375 683); alpha = 0.97; opaque = NO; layer = <CALayer: 0x1700383e0>>
Expected parent: <MyModelView: 0x10250ecd0; frame = (0 -16; 375 683); hidden = YES; layer = <CALayer: 0x17003d4a0>>
Break on UIViewReportBrokenSuperviewChain to debug.'
Kod wyzwalania problem jest:
[c presentViewController:tabBarViewController animated:NO completion:^{
Kod sub odpowiedzialny za problem wydaje się być:
- (void)addBlurView
{
CGRect viewBounds = [[UIScreen mainScreen]applicationFrame];
self.myModelView = [[MyModalView alloc] initWithFrame:CGRectMake(viewBounds.origin.x, -16, viewBounds.size.width, viewBounds.size.height+36)];
if(![self toolbar]) {
_toolbar = [[UIToolbar alloc] initWithFrame:[self.myModelView bounds]];
[_toolbar setBarStyle:UIBarStyleBlack];
_toolbar.alpha = 0.97;
[self.myModelView.layer insertSublayer:_toolbar.layer atIndex:0];
}
[self.view addSubview:self.myModelView];
}
Dlaczego manipulujesz hierarchią warstw? Być może lepiej jest dodać pasek narzędzi, podobnie jak wyglądzie myModelView i na pewno pozbyć się tego problemu? – slashdot
Cóż, jest to starszy kod, więc próbuję naprawić problem tutaj. Na razie właśnie usunąłem problem insertSublayer. Zauważyłem, że to była jakaś sztuczka, aby uzyskać tło przezroczystości. Wygląda na to, że jest to znana sztuczka, ale powoduje awarię aplikacji w nowej. Zaktualizuję ten wpis, gdy tylko skończę. – Mikael
Witam @Mikael "Przerwij UIViewReportBrokenSuperviewChain do debugowania.". Czy wiesz, co to znaczy? Mam ten błąd również i nie jest dobrze udokumentowany. –