0

我正在学习 Objective-C,我目前正在尝试使视图控制器之间的转换适用于 iOS4/iOS5 设备(之后我将只对故事板执行相同的 iOS5)。

据我了解,您仅在 ViewControllers 实例化时才进行实例化,并且在屏幕外viewDidUnload时用于释放内存。viewController.view

我发现的示例确实在 buttonIsClicked 时调用的方法中实例化了下一个视图控制器。但是假设我想来回走,我很确定这不是正确的方法(即,如果我想保留表单值等)。

所以我把我所有的 viewControllers 都给了我的 appDelegate,然后我想把它们存储在一个很好的包含 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

似乎您没有实例化您的字典 - 它仍然为零并忽略自身的所有操作。您必须在使用它之前对其进行分配初始化。

于 2012-08-17T22:21:49.933 回答