performSegueWithIdentifier destinationViewController deallocs with ARC

时间:2013-06-13 05:37:30

标签: ios objective-c segue

奇怪的问题在这里:

我创建了一个带有两个视图控制器的故事板,与自定义segue(交叉解析)相连。我通过以下方式使segue发生:

-(void)transitionToIntro
{ 
    [self performSegueWithIdentifier:@"ToIntro" sender:self];
}

这转换,我看到新的视图控制器,在initWithCoder和AwakeFromNib之后,它设置了UI,我看到设置了数据源和委托的属性。突然dealloc被解雇了!并且此目标视图控制器已取消分配。当然,一切都是无聊的。委托是nil,Datasources是nil,因为包含viewcontroller对包含它的子视图无效...

我不知道为什么会发生这种情况,源视图控制器是否保留了对目标viewcontroller的强大保持力?

我已确保将故事板中的初始视图控制器设置为我的源视图控制器。

感谢任何帮助

1 个答案:

答案 0 :(得分:2)

解决方案:

确保源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;
    }
}