私の最近のプロジェクトでは、presentviewController を使用してビューの切り替えを整理しました。しかし、奇妙な問題があります。
最初に、git ハブでデモを作成しました: test present view。問題が理解しやすくなることを願っています。
次に、デモで行ったことを示します。1) ルート ビュー コントローラーは T1RootViewController で、次のプロパティがあります。
@property (strong, nonatomic) T1TopViewController1 *top1VC;
読み込まれると、T1TopViewController1 が唯一のサブビューとして追加されます。
self.top1VC = [[T1TopViewController1 alloc] initWithNibName:@"T1TopView1" bundle:nil];
[self.view addSubview:self.top1VC.view];
2) T1TopViewController1 には次のプロパティがあります。
@property (strong, nonatomic) T1TopViewController2 *topVC2;
また、押されたときに T1TopViewController2 を表示するボタンもあります。
self.topVC2 = [[T1TopViewController2 alloc] initWithNibName:@"T1TopView2" bundle:nil];
[self presentViewController:self.topVC2 animated:NO completion:nil];
3) T1TopViewController2 は T1TopViewController1 とほぼ同じですが、T1TopViewController3 が存在する点が異なります。
4) T1TopViewController3 にはボタンがあり、押すと T1TopViewController1 に戻ります。
UIWindow *rootWin = [[UIApplication sharedApplication] keyWindow];
T1RootViewController *rootVC = (T1RootViewController *)rootWin.rootViewController;
[rootVC.top1VC dismissViewControllerAnimated:NO completion:nil];
次に、T1TopViewController1 からこのアプリを実行し、T1TopViewController3 が表示されるまで各ビューのボタンをクリックします。T1TopViewController3 ボタンをクリックすると、T1TopViewController1 に戻ります。次に、T1TopViewController1 のボタンをもう一度クリックします。問題が発生する可能性があります:
1) ios 5 シミュレーターでは問題ありません
2) ios 6.1 シミュレーターまたはデバイスではクラッシュし、次のログが記録されます:
test[699:c07] * -[T1TopViewController2 isKindOfClass:]: message sent割り当て解除されたインスタンス 0x75ade30 へ
コードのどこが間違っているのか、それを修正する方法が本当にわかりません。どんな助けにもとても感謝します。
ps 開発環境はmac os x 10.8.4、xcode 4.6.3です。プロジェクトは ARC を有効にします。