2016-09-19 15 views
9

Kodumu Swift 3'e taşıdıktan sonra bir soruna girdim. Artık iOS10 yeni sorunları gündeme getiriyor ve aslında Swift'in kendisi ile ilgili değil.Swift UIViewReportBrokenSuperviewÇalışan neden Layer manipülasyonu

hatası: sorunu tetikleyen kod

*** 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.' 

olduğunu

:

- (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]; 
} 
+0

Neden katman hiyerarşisini yönlendiriyorsunuz? Belki de bir araç çubuğunu myModelView'ın bir alt görünümü olarak eklemek ve bu problemden emin olmak ister misiniz? – slashdot

+0

Eh, bu eski kod, bu yüzden sorunu düzeltmeye çalışıyorum. Şimdilik insertSublayer sorununu yeni kaldırdım. Saydamlık geçmişi elde etmenin bir çeşit hile olduğunu anladım. Görünüşe göre bu bilinen bir hiledir, ancak bu uygulama yeni bir uygulamada çökmesini sağlar. Bu gönderiyi bitirir bitirmez güncelleyeceğim. – Mikael

+0

Merhaba @Mikael "Hata ayıklamak için UIViewReportBrokenSuperviewChain". Bunun ne anlama geldiğini biliyor musun? Bu hatayı da aldım ve iyi belgelenmiş değil. –

cevap

9

ben bu sorunu vardı:

[c presentViewController:tabBarViewController animated:NO completion:^{ 

sorun sorumlu alt kod gibi görünüyor Xcode 8'e taşınırken bir kütüphane (Material-Controls-For-iOS - MDTextField). Sorunun, bir görüşün (süper manzaraya sahip olmayan) katmanının bir diğerine eklendiğinden kaynaklandığını gördüm.

Bu, kendiniz için de geçerli gibi görünüyor - oluşturulan araç çubuğunuz önce bir süper görünüme eklenmedi. Kullandığım düzeltme, görünümü katmanın eklendiği görünümün bir alt görünümü olarak eklemekti. Bu durumda, araç çubuğunu myModelView alt görünümü olarak ekleyerek hatayı durdurmalısınız.

+0

Burada kaza nedenini açıkça buldunuz. eklerseniz: [self.myModelView addSubview: _toolbar]; Katmanı yerleştirmeden önce, çökme yok. – Mikael