アプリケーションのルートビューコントローラーであるナビゲーションコントローラーがあります。それは私のメイン画面です。マスタービューに場所が表示され、詳細ビューに地図上の場所が表示される分割ビューコントローラーがあります。分割ビューコントローラーをナビゲーションコントローラーにプッシュしたかったのですが、分割ビューコントローラーをナビゲーションコントローラーにプッシュできず、アプリケーションのルートビューコントローラーである必要があるというエラーがスローされます。だから私は一生懸命やってみました。
MyAppDelegate *myappdelegate= [[UIApplication sharedApplication] delegate];
UISplitViewController * vc= [[UISplitViewController alloc] init];
vs.viewControllers = [NSArray arraywithObjects......
....
myappdelegate.window.rootViewController= vc;
これは機能します。期待どおり、アニメーションなしの分割ビューコントローラが表示されます。そして、分割ビューコントローラを閉じていたときに同じ手順を実行します。メイン画面のペン先でナビゲーションコントローラーを作成し、これをアプリデリゲートのwindow.rootviewControllerに再度設定しています。そして、メイン画面を再び正常にロードします。
しかし、これがこれを達成するための適切な方法だと思います。これを行うためのより適格な方法はありますか?
そして、分割ビューコントローラーの子コントローラーを解放できませんでした。子コントローラーのリリースメソッドにブレークポイントを設定しました。捕まえられなかった。アプリのルートビューコントローラーをナビゲーションコントローラーとして設定する場合、古いルートビューコントローラー(分割ビューコントローラー)をその子と一緒に解放する必要があると想定しました。次に、スプリットビューコントローラーを閉じるときに以下のコードを試しました。
UISplitViewController *oldviewcontroller= (UISplitViewController*) myappdelegate.window.rootViewController;
for (UIViewController *child in oldviewcontroller.viewControllers)
{
[child release];
}
//Setting the navigation controller as window.rootviewController again in here.
このコードは、「[UIImageView __viewDidDisappear:]:認識されないセレクターがインスタンス0x7dに送信されました...」というエラーをスローします。
すでにビューを解放しているため、viewdidDisappearイベントにimageviewがないようです。
簡単に言えば、私の質問は、これを達成するために正しい方法を使用しているということですか?もしそうなら、どうすればすべての子ビューコントローラを正常に解放できますか?