2012-09-17 23 views
14

Miałem moje LayoutConstraints działa poprawnie, a potem nagle zacząłem dostawać to, dodając ograniczenia do mojego widoku.Ograniczenie musi zawierać pierwszy element układu NSLayoutConstraint

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Constraint must contain a first layout item' 
*** First throw call stack: 
(0x7cd012 0x2017e7e 0x7ccdeb 0xde6bf1 0x9c487 0x994a3 0x414fb 0x20224 0x5c6c0 0xc30e83 0x78c376 0x78be06 0x773a82 0x772f44 0x772e1b 0x28eb7e3 0x28eb668 0x149465c 0x2cfd 0x2c25) 
libc++abi.dylib: terminate called throwing an exception 

I nie istnieje bezpośredni dokumentacji w Internecie lub na Apple Docs, co oznacza, że ​​komunikat o błędzie.

Zastanawiasz się, czy ktoś napotkał ten błąd i wie, co mogę zrobić, aby go rozwiązać?

Odpowiedz

21

Ah, znalazłem problem. Dla każdego, kto ma ten problem, to dlatego, że widok nie został jeszcze utworzony w pliku nib/UIView, więc nie można zastosować żadnych ograniczeń.

Przesunąłem kod ograniczenia z metody initWithNib do viewDidLoad i błąd w naturalny sposób przestał występować.

+0

Otrzymuję tę awarię, nawet z ograniczeniem tworzonym/dodawanym w viewDidLoad. –

+0

Pokaż nam swój kod, to będzie coś prostego –

33

Jeszcze jeden powód tego błędu/awarii może być, widoki przekazane do metody [NSLayoutContraint constraintWithItem ...] są zerowe.

+0

@smileBot Ustawiłem jako silny, ale zwraca mi zero. Rozszerzyłem plik UIView i loadNib i zaktualizowałem koneksje, ale jego błąd spowodowany przez self.subView jest zerowy. [self addConstraint: [NSLayoutConstraint constraintWithItem: self.subView atrybut: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeTop multipiplier: 1.0 constant: 0.0]]; –

0

To również może się zdarzyć, jeśli wyłączyć autoLayout z jakiegoś powodu, ale nadal jesteś dodanie ograniczenia do jakiejkolwiek podrzędny za pomocą kodu (np do obsługi zmiany orientacji)

To zdarzyło się do mnie, kiedy wykorzystywane do różnych NIB na dla iPhone'a i iPada i wyłączono funkcję Autolayout tylko dla iPhone'a NIB podczas korzystania ze wspólnego pliku .m.

Rozwiązaniem jest sprawdzenie typu urządzenia i pominięcie dodawania układu tam, gdzie nie jest to konieczne.

+0

@smileBot Ustawiłem jako silny, ale zwraca mi zero. Rozszerzyłem plik UIView i loadNib i zaktualizowałem koneksje, ale jego błąd spowodowany przez self.subView jest zerowy. [self addConstraint: [NSLayoutConstraint constraintWithItem: self.subView atrybut: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeTop multipiplier: 1.0 constant: 0.0]]; –

7

Jeśli chcesz zobaczyć swoje poglądy dzięki właściwościom, upewnij się, że są silne! To może wyjaśniać, że są zerowe.

+0

przełączanie się na silną naprawę mojego problemu. dzięki! –

+0

samo tutaj, przejście do silnego naprawiono problem. – blackmoon

+0

@smileBot Ustawiłem jako silny, ale zwraca mi zero. Rozszerzyłem plik UIView i loadNib i zaktualizowałem koneksje, ale jego błąd spowodowany przez self.subView jest zerowy. [self addConstraint: [NSLayoutConstraint constraintWithItem: self.subView atrybut: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeTop multipiplier: 1.0 constant: 0.0]]; –

Powiązane problemy