0

私は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];
4

1 に答える 1

1

辞書をインスタンス化していないようです。辞書はnilのままで、それ自体に対するすべての操作を無視します。使用する前に、alloc-initする必要があります。

于 2012-08-17T22:21:49.933 に答える