2012-09-17 9 views
14

Tenía mis Restricciones de diseño funcionando bien, y de repente comencé a recibir esto al agregar Restricciones a mi vista.Restricción debe contener un primer elemento de diseño 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 

Y no existe documentación inmediata en Internet o en los documentos de Apple sobre qué significa el mensaje de error.

¿Solo me pregunto si alguien ha encontrado este error y sé lo que puedo hacer para solucionarlo?

Respuesta

21

Ah, encontró el problema. Para cualquier persona que tenga este problema, es porque todavía no se ha creado la vista en el nib/UIView, por lo que no se pueden aplicar restricciones.

Moví el código de Restricción del método initWithNib a viewDidLoad y el error se detuvo de forma natural.

+0

Estoy recibiendo este bloqueo incluso con la restricción que se crea/agrega en viewDidLoad. –

+0

Muéstranos tu código, será algo simple –

33

Una razón más para este error/bloqueo puede ser que las vistas pasadas al método [NSLayoutContraint constraintWithItem ...] son ​​nulas.

+0

@smileBot Me pongo fuerte pero me devuelve nulo. He extendido el archivo UIView y loadNib y he actualizado las restricciones, pero se ha bloqueado debido a que self.subView es nulo. [auto addConstraint: [NSLayoutConstraint constraintWithItem: self.subView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: autoatributo: NSLayoutAttributeTop multiplicador: 1.0 constante: 0.0]]; –

0

Esto también puede ocurrir si apaga autoLayout por alguna razón, pero usted todavía está añadiendo restricciones a cualquier subvista a través de código (por ejemplo, para el manejo de los cambios de orientación)

Esto me sucedió cuando solía diferente SEMILLA de para iPhone y iPad y se desactivó Autolayout solo para el NIB de iPhone mientras se usa un archivo .m común.

La solución es verificar el tipo de dispositivo y omitir la adición del diseño donde no es necesario.

+0

@smileBot Me puse fuerte pero me devuelve nulo. He extendido el archivo UIView y loadNib y he actualizado las restricciones, pero se ha bloqueado debido a que self.subView es nulo. [auto addConstraint: [NSLayoutConstraint constraintWithItem: self.subView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: autoatributo: NSLayoutAttributeTop multiplicador: 1.0 constante: 0.0]]; –

7

¡Si te agarras a tus vistas con propiedades, asegúrate de que sean fuertes! Esto podría explicar que sean nulas.

+0

cambiando a fuerte mi problema fijo. ¡Gracias! –

+0

mismo aquí, cambiando a fuerte solucionó el problema. – blackmoon

+0

@smileBot Me pongo fuerte pero me devuelve nulo. He extendido el archivo UIView y loadNib y he actualizado las restricciones, pero se ha bloqueado debido a que self.subView es nulo. [auto addConstraint: [NSLayoutConstraint constraintWithItem: self.subView attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: autoatributo: NSLayoutAttributeTop multiplicador: 1.0 constante: 0.0]]; –

Cuestiones relacionadas