Tuesday 14 July 2015

iOS 8.3 crashes when installing nil constraints on "toItem" views (AUTOLAYOUT)

A multiplier of 0 or a nil second item together with a location for the first attribute creates 
an illegal constraint of a location equal to a constant. Location attributes must be specified in 
pairs.
                                       
OR
[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: 
A multiplier of 0 or a nil second item together with a location for the first attribute creates an illegal constraint of a location equal to a constant. Location attributes must be specified in pairs'



While working with iOS 8.3, I found a independent bug which is generate when you are going to user Auto layout manually.  If you construct layout constraints manually. e.g.

  
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self.view1
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:self.view2
attribute:NSLayoutAttributeLeft
multiplier:1 
constant:0];
Under iOS 8.3, if you also link against the 8.3 SDK, NSLayoutConstraint has gotten a little pickier. If you accidentally pass in nil for the second view, and that contradicts the the attribute being specified, you’ll now get an exception. Previous OS releases appear to have quietly ignored this transgression on your code’s part.



No comments:

Post a Comment