我有些奇怪的行为。
UIStackView *stackView = [UIStackView alloc];
stackView = [stackView initWithArrangedSubviews:@[self.subview1,self.subview2]];
[self addSubview:stackView];
[stackView setTranslatesAutoresizingMaskIntoConstraints:NO]
[self addConstraint:[NSLayoutConstraint constraintWithItem:stackView attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0f constant:0]]
当我使用XCode的Ipad Air 2模拟器时,此代码运行正常,但是当我实际尝试在Ipad Air 2上运行它时,它在尝试添加布局约束时崩溃(代码的最后一行) ,抱怨stackView
是nil
。
在单步执行代码后,我确实发现stackView
在第一行(nil
之后的[UIStackView alloc]
之后是return nil
。这对我来说很奇怪,因为我不知道为什么一个alloc调用return nil
,更不用说为什么UIStackView * stackView = [[UIStackView alloc] initWithArrangedSubviews:@[self.subview1,self.subview2]];
[self addSubview:stackView];
[stackView setTranslatesAutoresizingMaskIntoConstraints:NO]
[self addConstraint:[NSLayoutConstraint constraintWithItem:stackView attribute: NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0f constant:0]]
仅在实际设备上而不是模拟设备。
修改
我原来的代码如下:
stackView
在这种情况下,nil
/ alloc
合并之后init
为nil
,但我不知道是哪一个<input type="text" name="username" value="<?php echo $user_data['username']?>"/>
。这就是为什么我把呼叫分开来看。
答案 0 :(得分:0)
我认为问题是您正在错误地创建UIStackView。它应该像下面那样创建:
UIStackView *stackView = [[UIStackView alloc] init];
似乎ARC只是立即清理UIStackView,因为你没有正确地引用它。
实际设备和模拟器之间的差异可能归因于ARC在模拟器上以不同的间隔工作。首先要在实际设备上测试代码的另一个原因! ;)