我正在尝试在现有视图中调用新视图
TransactionFinish *childView= [[TransactionFinish alloc] initWithNibName:@"TransactionFinish" bundle:nil];
childView.view.frame = self.view.frame;
childView.view.frame=CGRectMake(10, 10, self.view.frame.size.width-20, self.view.frame.size.height-20);
childView.view.alpha = 0.0f;
[self.view addSubview:childView.view];
[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaseOut
animations:^{
childView.view.alpha = 1.0f;
}
completion:^(BOOL finished) {
}];
它位于ViewDidLoad()
的{{1}}内(我已经尝试过调试它)但是它给了我带绿色的线程TransactionFinish
答案 0 :(得分:1)
问题在于childView
的生命周期。您将对它的引用实例化并存储到局部变量中:
TransactionFinish *childView= [[TransactionFinish alloc] initWithNibName:@"TransactionFinish" bundle:nil];
如果您使用ARC,当局部变量超出范围时,它所引用的对象(childView
)将被释放。
如果你不使用ARC,我想你正在做:
[childView release];
某处可以避免childView
被泄露(因为上面粘贴的代码会暗示)。
任何一个假设都可以解释为什么会发生崩溃:当调用viewDidLoad
时,控制器已被解除分配。
将childView
视图添加到self.view
:
[self.view addSubview:childView.view];
将保留childView.view
但不保留childView
。所以控制器被释放,而它的视图不是。
对此的修复是在您的类中创建strong
属性以存储对childView
控制器的引用:
@property(nonatomic, strong) TransactionFinish *childView;
另一种可能性是使用controller containment;你可以做点什么吗
[vc willMoveToParentViewController:self];
[self addChildViewController:childView];
[self.view addSubview:childView.view]; // or something like this.
[childView didMoveToParentViewController:self];
但这只适用于iOS5 +。