私はObjective-Cを学んでおり、現在iOS4 / iOS5デバイスでViewController間の移行を機能させようとしています(後でストーリーボードでのみ同じiOS5を実行します)。
私が理解したように、ViewControllersを一度だけインスタンス化し、が画面外にあるviewDidUnload
ときにメモリを解放するために使用しviewController.view
ます。
私が見つけた例では、buttonIsClicked時に呼び出されるメソッドで次のViewControllerをインスタンス化しました。しかし、行き来したいとしましょう。これは正しい方法ではないと確信しています(つまり、フォームの値を保持したい場合など)。
そこで、すべてのviewControllerをappDelegateに渡してから、次を使用して1つのインスタンスを簡単に取得できるように、それらを適切に含まれたNSMutableDictionnary内に格納したいと思いました。
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
UIViewController *next = [appDelegate.controllers objectForKey:@"RegisterViewController"];
しかし...それはすべてを壊します(空白のビューを取得します)。
その理由を理解したいと思います。
これは機能しません:
[self.controllers setObject:[[LoginViewController alloc] initWithNibName:@"LoginViewController_iPhone" bundle:nil] forKey:@"LoginViewController"];
[self.controllers setObject:[[RegisterViewController alloc] initWithNibName:@"RegisterViewController_iPhone" bundle:nil] forKey:@"RegisterViewController"];
self.window.rootViewController = [self.controllers objectForKey:@"LoginViewController"];
[self.window makeKeyAndVisible];
しかし、これは:
UIViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController_iPhone" bundle:nil];
[self.controllers setObject:loginViewController forKey:@"LoginViewController"];
[self.controllers setObject:[[RegisterViewController alloc] initWithNibName:@"RegisterViewController_iPhone" bundle:nil] forKey:@"RegisterViewController"];
self.window.rootViewController = loginViewController;
[self.window makeKeyAndVisible];