这里有奇怪的问题:
我创建了一个带有两个 View Controller 的 Storyboard,与自定义segue(交叉溶解)连接。我通过以下方式实现转场:
-(void)transitionToIntro
{
[self performSegueWithIdentifier:@"ToIntro" sender:self];
}
此转换后,我看到了新的 View Controller ,在 initWithCoder 和 AwakeFromNib 之后,它设置了 UI,并且我看到数据源和委托(delegate)的属性已设置。然后突然解除分配被解雇!并且这个目标 View Controller 被释放。那么当然一切都是废话。委托(delegate)为零,数据源为零,因为包含的 View Controller 对于包含它的 subview 无效......
我不知道为什么会发生这种情况,源 View Controller 是否没有对目标 View Controller 保持强有力的控制?
我已确保将 Storyboard中设置的初始 View Controller 设置为我的源 View Controller 。
感谢任何帮助
最佳答案
解决方案:
确保源 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;
}
}
关于ios - PerformSegueWithIdentifier destinationViewController 使用 ARC 解除分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079894/