UIStackView分配调用仅在实际的ipad上返回nil,而不是在模拟器上

时间:2015-12-22 17:33:32

标签: ios objective-c null alloc uistackview

我有些奇怪的行为。

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上运行它时,它在尝试添加布局约束时崩溃(代码的最后一行) ,抱怨stackViewnil

在单步执行代码后,我确实发现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合并之后initnil,但我不知道是哪一个<input type="text" name="username" value="<?php echo $user_data['username']?>"/> 。这就是为什么我把呼叫分开来看。

1 个答案:

答案 0 :(得分:0)

我认为问题是您正在错误地创建UIStackView。它应该像下面那样创建:

UIStackView *stackView = [[UIStackView alloc] init];

似乎ARC只是立即清理UIStackView,因为你没有正确地引用它。

实际设备和模拟器之间的差异可能归因于ARC在模拟器上以不同的间隔工作。首先要在实际设备上测试代码的另一个原因! ;)