2

ここで奇妙な問題:

カスタム セグエ (クロス ディゾルブ) で接続された 2 つのビュー コントローラーを含むストーリーボードを作成しました。次の方法でセグエを実現します。

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

これが遷移し、新しいビュー コントローラーが表示されます。initWithCoder と AwakeFromNib の後、UI が設定され、データ ソースとデリゲートのプロパティが設定されていることがわかります。その後、突然deallocが発生します!そして、この宛先View Controllerは割り当て解除されます。その後、もちろんすべてがバンクされます。デリゲートは nil であり、Datasources は nil です。含まれているビューコントローラーは、それを含むサブビューに対して無効であるためです...

なぜこれが起こっているのかわかりません.ソースViewControllerは宛先ViewControllerを強く保持していませんか?

ストーリー ボードに設定された初期ビュー コントローラーをソース ビュー コントローラーに設定するようにしました。

どんな助けでも大歓迎です

4

1 に答える 1

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;
    }
}
于 2013-06-13T06:13:09.147 に答える