2014-07-14 8 views
14

Używam autoLayout w podklasie UITextField, ale czasami dostaję następujący błąd/StackTrace:błąd potwierdzenia w [MojaKlasa layoutSublayersOfLayer:]

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. KOAOneDigitTextField's implementation of -layoutSubviews needs to call super.'

*** First throw call stack: 
(
    0 CoreFoundation      0x0390d1e4 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x034c08e5 objc_exception_throw + 44 
    2 CoreFoundation      0x0390d048 +[NSException raise:format:arguments:] + 136 
    3 Foundation       0x0167e4de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116 
    4 UIKit        0x02615a38 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 567 
    5 libobjc.A.dylib      0x034d282b -[NSObject performSelector:withObject:] + 70 
    6 QuartzCore       0x01caf45a -[CALayer layoutSublayers] + 148 
    7 QuartzCore       0x01ca3244 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380 
    8 QuartzCore       0x01ca30b0 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26 
    9 QuartzCore       0x01c097fa _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294 
    10 QuartzCore       0x01c0ab85 _ZN2CA11Transaction6commitEv + 393 
    11 QuartzCore       0x01cc85b0 +[CATransaction flush] + 52 
    12 UIKit        0x025a49bb _UIApplicationHandleEventQueue + 13095 
    13 CoreFoundation      0x0389677f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 
    14 CoreFoundation      0x0389610b __CFRunLoopDoSources0 + 235 
    15 CoreFoundation      0x038b31ae __CFRunLoopRun + 910 
    16 CoreFoundation      0x038b29d3 CFRunLoopRunSpecific + 467 
    17 CoreFoundation      0x038b27eb CFRunLoopRunInMode + 123 
    18 GraphicsServices     0x0530c5ee GSEventRunModal + 192 
    19 GraphicsServices     0x0530c42b GSEventRun + 104 
    20 UIKit        0x025a6f9b UIApplicationMain + 1225 
    21 MyProject       0x0006e94d main + 141 
    22 libdyld.dylib      0x03e86701 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Czego mi brakuje ?

+0

http://stackoverflow.com/questions/12610783/auto-layout-still-required-after-executing-layoutsubview-with-uitableviewcel – trojanfoe

+0

http://stackoverflow.com/questions/19837097/why-am-i -getting-a-auto-layout-nadal-wymagane-po-wykonawcze-layoutsubviews – trojanfoe

+0

http://stackoverflow.com/questions/13875605/customcell-crash-in-uitableview – trojanfoe

Odpowiedz

27

Miałem podobny problem z widoku niestandardowego i okazuje się, że jeden z moich własnych klas dominujących został nadrzędnymi -layoutSubviews i nazywając super, tylko dzwoni super pierwszy zamiast ostatniej. Co ustalone to dla mnie było upewniając wszystkie nadpisania do -layoutSubviews w moim projekcie były formy:

- (void)layoutSubviews { 
    // Custom code which potentially messes with constraints 
    [super layoutSubviews]; // No code after this and this is called last 
} 
+0

Dziękuję! To pomaga. – Maria

17

Właśnie zacząłem ten problem występuje z niebieskim, na dwóch VC, które były w porządku roboczych.

Okazuje się, dodając

[self.view layoutIfNeeded]; 

w ostatnim wierszu metody viewDidLayoutSubviews na mojej VC stałe to dla mnie.

Nie mam pojęcia, dlaczego to zadziałało lub dlaczego się zepsuło, ale większość naszych testów jest przeciwko iOS 8 i podczas pracy nad problemami działającymi w ramach 7 tego pojawił się.

Nie można znaleźć rozwiązania, które działałoby dla tego konkretnego problemu, więc mam nadzieję, że pomoże to komuś innemu!

+0

Miałem ten sam problem, moja aplikacja działa dobrze na iOS 8, ale narzeka na iOS 7. – axl411

+0

To samo dotyczy mojej aplikacji. To pomaga. Dzięki –

+0

To rozwiązało problem także dla mnie. Dzięki! – enricmacias