奇怪的问题:
我创建了一个带有两个 View Controller 的 Storyboard,并与自定义转场(交叉溶解)相连。我通过以下方式实现 segue:
-(void)transitionToIntro
{
[self performSegueWithIdentifier:@"ToIntro" sender:self];
}
这个转换,我看到了新的 View Controller ,在 initWithCoder 和 AwakeFromNib 之后,它设置了 UI,我看到数据源和委托(delegate)的属性已经设置。然后突然 dealloc 被解雇了!并且这个目标 View Controller 被释放了。然后当然所有东西都铺了。代表为零,数据源为零,因为包含的 View Controller 对包含它的 subview 无效...
我不知道为什么会这样,源 View Controller 是否没有保留对目标 View Controller 的强控制?
我已确保将 Storyboard中设置的初始 View Controller 设置为我的源 View Controller 。
感谢任何帮助
最佳答案
解决方法:
确保您的源 VC 保留对目标 VC 的强引用,并在 prepareForSegue 中进行设置。否则,您将在运行 initWithCoder 和 AwakeFromNib 后看到目标 VC dealloc 本身。
@property (nonatomic, strong) IntroViewController *destVC;
-(void)transitionToIntro
{
[self performSegueWithIdentifier:@"ToIntro" sender:self];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ToIntro"])
{
IntroViewController *dest = [segue destinationViewController];
self.destVC = dest;
}
}
关于ios - performSegueWithIdentifier destinationViewController 使用 ARC 解除分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079894/