2013-06-13 20 views
2

奇数这里的问题:performSegueWithIdentifier destinationViewController deallocs与ARC

我创建了两个视图控制器,具有自定义连接赛格瑞(交叉disolve)故事板。我做SEGUE恰巧:

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

这种转变,我看到新的视图控制器,之后的initWithCoder和AwakeFromNib它会设置UI和我看到的数据源和代表的属性设置。突然dealloc被解雇了!并且这个目标视图控制器被解除分配。那么当然,一切都会被掩盖起来。委托是零和数据源是零,因为包含的ViewController是无效的包含其子视图...

我不知道为什么发生这种情况,在源视图 - 控制不是目的ViewController中保留了强烈的保留?

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

任何帮助表示赞赏

+1

在prepareForSegue方法中,您是否存储了segue的destinationViewcontroller?发布该代码将会很有帮助。 – Amit

+0

我不是......我没有做一个准备赛...也许这就是我的问题!啊,就是这样,我需要为源VC创造一个属性,让它坚持到目标VC,并在我的prepareForSegue中设置它...我对故事板有点新。 – theprojectabot

回答

2

解决方案:

确保有源VC有保留强引用目的地VC,并设置在prepareForSegue。如果没有,您将在运行initWithCoder和AwakeFromNib后看到您的目标VC自己释放。

@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; 
    } 
}