我正在尝试通过代码构建一个View.在我的初学者我有这个:
- (id) init{
self = [super init];
if(self){
[self setFrame:CGRectMake(0, 0, 0, 50)];
[self addSubview:[self dateNumberView]];
NSDictionary *views = NSDictionaryOfVariableBindings(self.dateNumberView);
[self.dateNumberView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[dateNumberView]-|" options:0 metrics:nil views:views]];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse constraint format: dateNumberView is not a key in the views dictionary. |-[dateNumberView]-|
Run Code Online (Sandbox Code Playgroud)
怎么了?
不要使用:
NSDictionary *views = NSDictionaryOfVariableBindings(self.dateNumberView);
Run Code Online (Sandbox Code Playgroud)
因为该self.部分被系统误解(KVC类型导航).相反,请对视图进行本地引用,并在整个代码中使用它:
- (id) init{
self = [super init];
if(self) {
UIView *dateNumberView = [self dateNumberView];
[self setFrame:CGRectMake(0, 0, 0, 50)];
[self addSubview: dateNumberView];
NSDictionary *views = NSDictionaryOfVariableBindings(dateNumberView);
[dateNumberView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[dateNumberView]-|" options:0 metrics:nil views:views]];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
使用self.只是用于调用返回对象的方法的语法糖,它不是可以用作键的东西.
试试这个:
NSDictionary *views = NSDictionaryOfVariableBindings(_dateNumberView);
Run Code Online (Sandbox Code Playgroud)
如果您使用自动合成属性,哪个应该是正确的.
| 归档时间: |
|
| 查看次数: |
2871 次 |
| 最近记录: |