2014-08-28 5 views
6

Moja aplikacja uruchamia się z menu głównym, które jest niestandardową podklasą o nazwie UIViewController o nazwie LVSMainViewController. Jest on osadzony w UINavigationController, który jest ustawiony jako początkowe VC w storyboardie. LVSMainViewController implementuje -viewDidLayoutSubviews."Automatyczne układanie nadal wymagane ..." powoduje awarię po powrocie do głównego kontrolera widoku.

Naciśnięcie przycisku przenosi użytkownika do innej sekcji aplikacji (innego VC). Użytkownik powraca do głównego menu za pomocą przycisku podłączonego do przełącznika push. Ale gdy aplikacja ładuje menu główne VC znowu, to wywala z komunikatem:

2014-08-28 16: 11: 14,122 * błąd potwierdzenia w - [UIView layoutSublayersOfLayer:]/SourceCache/UIKit_Sim/UIKit -2935.137/UIView.m: 8803

2014-08-28 16: 11: 14.257 * Zakończenie aplikacji z powodu nieprzechwyconego wyjątku "NSInternalInconsistencyException", powód: "Auto Layout nadal wymagany po wysłaniu -viewDidLayoutSubviews do kontrolera widoku. Implementacja LVSMainViewController musi wysłać -layoutSubviews do widoku, aby uruchomić automatyczny układ. "

Inne posty na SO zgłosić ten sam błąd przy ustalaniu ograniczeń automatycznego układu programowo (nie robię, że choć używam auto-układ w serii ujęć) i/lub przy użyciu UITableView (co nie jestem używając albo głównego menu VC, albo VC, do którego się przyłączy, chociaż używam go w innym miejscu w aplikacji). (Patrz here lub here.)

Pozostałe elementy układanki:

  1. Próbowałem, dodając [self.view layoutSubviews]; na koniec -viewDidLayoutSubviews. To się nie psuje, kiedy to robię. Ale wydaje się nierozsądne, ponieważ Apple's documentation mówi

    Nie należy bezpośrednio wywoływać tej metody. Jeśli chcesz wymusić aktualizację układu , wywołaj metodę setNeedsLayout zamiast tego przed numerem do kolejnej aktualizacji rysunku.

  2. Gdybym zamiast dodawać [self.view setNeedsLayout]; pod koniec -viewDidLayoutSubviews, awarii aplikacji z nim najpierw ładuje menu głównego VC, kiedy nie zostawić go i powrotu.

Co może być przyczyną?

+0

Jaki jest kod na swojej 'viewDidLayoutSubviews'? – fluidsonic

+0

@fluidsonic Właśnie się sprawdziłem i teraz działa poprawnie pod XCode 6.0.1. Zakładam, że był to błąd we wcześniejszych wersjach. – grendelsdad

Odpowiedz

14

Przyczyna awarii jest magicznie poprawiona prawdopodobnie dlatego, że używasz teraz systemu iOS 8. Czy próbowałeś uruchomić ten kod na iOS7?

Jesteś blisko odpowiedzi, dzwoniąc pod numer [self.view layoutSubviews].

Spróbuj zadzwonić pod numer [self.view layoutIfNeeded].

zobaczyć te posty:

Autolayout and subviews

Auto Layout error

+0

Dzięki, te posty pomogą. Ale jak już powiedziałem, kod działa teraz dobrze, więc nie zamierzam się z nim bawić. – grendelsdad

+0

@grendelsdad wypróbowałeś aplikację na urządzeniu z iOS 7.x. Uważam, że to rozwiązanie jest prawdziwe. – iosCurator

Powiązane problemy