我想在界面构建器中为我的一些约束设置identifier
属性。我之前在User Defined Runtime Attributes
个实例中使用了NSView
表,并没有遇到任何问题,但是我无法使用约束类完成同样的事情。当我尝试在代码中访问标识符时,它只返回null,而不是我输入到表的 Value 列中的字符串。我想这可能与xib加载机制有关,但我希望有人能够肯定地说出问题是什么。
IB --> Identity Inspector --> User Defined Runtime Attributes
:
稍后使用IBAction
方法:
NSLog(@"%@", self.widthCon.identifier);
// --> (null)
答案 0 :(得分:5)
NSLayoutConstraint实现似乎存在一些基本错误。在NSLayoutConstraint上创建一个类别并覆盖一些用于调试目的的方法,揭示了以下内容:
在编译期间,Xcode必须剥离运行时属性,原因如下:
NSLayoutCategory setValue:forKey:
,setValue:forKeyPath:
和setValue:undefinedKey:
内覆盖的KVC方法永远不会被调用。
调用覆盖的方法setIdentifier:
,但永远不会从运行时属性部分接收传递的值
提供无效密钥不会像在任何其他对象上那样创建错误,例如NSView:
2014-03-19 08:25:52.806 LayoutTestApp [13733:303] [setValue:forUndefinedKey:]:此类与密钥testKey不符合密钥值编码。
此外,在Xcode上也可以优雅地忽略在NSLayoutConstraint上设置自定义类(自定义类' init方法永远不会被调用)。看起来Apple禁用了NSLayoutConstraints的运行时属性和自定义类功能,或者它只是一个bug。无论哪种方式:通过运行时属性设置标识符很可能不会起作用。
答案 1 :(得分:-1)
您的问题可能是,NSLayoutConstraint
类没有属性identifier
,请尝试以下操作:
NSLog(@"%@", [self.widthCon valueForKey:@"identifier"]);