奇怪的问题在这里:
我创建了一个带有两个视图控制器的故事板,与自定义segue(交叉解析)相连。我通过以下方式使segue发生:
-(void)transitionToIntro
{
[self performSegueWithIdentifier:@"ToIntro" sender:self];
}
这转换,我看到新的视图控制器,在initWithCoder和AwakeFromNib之后,它设置了UI,我看到设置了数据源和委托的属性。突然dealloc被解雇了!并且此目标视图控制器已取消分配。当然,一切都是无聊的。委托是nil,Datasources是nil,因为包含viewcontroller对包含它的子视图无效...
我不知道为什么会发生这种情况,源视图控制器是否保留了对目标viewcontroller的强大保持力?
我已确保将故事板中的初始视图控制器设置为我的源视图控制器。
感谢任何帮助
答案 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;
}
}