2012-09-17 30 views
14

Ho avuto il mio LayoutConstraints funzionante, quindi tutto ad un tratto ho iniziato a ottenere questo quando si aggiungono vincoli alla mia vista.Il vincolo deve contenere un primo elemento di layout 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 

E non esiste alcuna documentazione immediata su internet o su Apple Documenti come a ciò che significa il messaggio di errore.

Basta chiedersi se qualcuno ha riscontrato questo errore e sapere cosa posso fare per risolverlo?

risposta

21

Ah, trovato il problema. Per chi ha questo problema, è perché la vista non è ancora stata creata in nib/UIView, quindi nessun vincolo può essere applicato.

ho spostato il codice vincolo dal metodo initWithNib per viewDidLoad e l'errore naturalmente fermato verificano.

+0

Si verifica un arresto anomalo anche con il vincolo creato/aggiunto in viewDidLoad. –

+0

Mostraci il tuo codice, sarà qualcosa di semplice –

33

Un motivo in più per questo errore/crash può essere, il punto di vista passati al metodo [NSLayoutContraint constraintWithItem ...] sono pari a zero.

+0

@smileBot Ho impostato come forte ma mi restituisce nil. Ho esteso il file UIView e loadNib e aggiorno i limiti, ma il suo arresto anomalo a causa di self.subView è nullo. [self addConstraint: [NSLayoutConstraint constraintWithItem: self.subView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeTop moltiplicatore: 1.0 costante: 0.0]]; –

0

Questo può succedere anche se si spegne Autolayout per qualche ragione, ma si sta ancora aggiungendo vincoli a qualsiasi visualizzazione secondaria tramite codice (ad esempio, per la gestione delle modifiche di orientamento)

Questo è successo a me quando ho usato per diversi NIB di per iPhone e iPad e disattivato Autolayout solo per l'iPhone NIB durante l'utilizzo di un file .m comune.

La soluzione è controllare il tipo di dispositivo e saltare l'aggiunta del layout dove non è necessario.

+0

@smileBot Ho impostato come forte ma mi restituisce nil. Ho esteso il file UIView e loadNib e aggiorno i limiti, ma il suo arresto anomalo a causa di self.subView è nullo. [self addConstraint: [NSLayoutConstraint constraintWithItem: self.subView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeTop moltiplicatore: 1.0 costante: 0.0]]; –

7

Se ti stai aggrappando alle tue opinioni con le proprietà, assicurati che siano forti! Questo potrebbe spiegare che sono nulli.

+0

passando a strong risolto il mio problema. Grazie! –

+0

stesso qui, passando a forte risolto il problema. – blackmoon

+0

@smileBot Ho impostato come forte ma mi restituisce nil. Ho esteso il file UIView e loadNib e aggiorno i limiti, ma il suo arresto anomalo a causa di self.subView è nullo. [self addConstraint: [NSLayoutConstraint constraintWithItem: self.subView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: self attribute: NSLayoutAttributeTop moltiplicatore: 1.0 costante: 0.0]]; –

Problemi correlati