我正在学习 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];