我有一个三选项卡应用程序,它共享一个用于连接信息(客户端 ID、服务器地址、端口号)的 plist。在每个视图控制器中,一个 NSUserDefaults 对象在 viewDidLoad 方法中被初始化:
- (void)viewDidLoad {
[super viewDidLoad];
// load default settings into class instance variables
defaults = [NSUserDefaults standardUserDefaults];
self.clientID = [defaults objectForKey:@"clientID"];
self.serverAddress = [defaults objectForKey:@"serverAddress"];
self.serverPort = [defaults objectForKey:@"serverPort"];
}
我的一个视图代表一个“设置”页面,允许用户对 plist 进行更改。但是,当更新 plist 时,更改不会反映在所有选项卡视图中,因为每个对象都需要同步:
[defaults synchronize];
我了解到 viewDidLoad 方法在应用程序的生命周期内只调用一次(至少对于 Tab Bar 应用程序),所以我不能把同步调用放在这里。然后我转向 AppDelegate 类并发现了 tabBarController 方法。如何使用此方法在所有视图控制器之间同步 NSUserDefaults 对象而不需要同步按钮?这甚至是在应用程序打开时共享/调整偏好的正确方法吗?
这是我现在的位置:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
// I need to synchronize somewhere in here???
switch (tabBarController.selectedIndex)
{
case 0:
NSLog(@"Tab 0 selected");
break;
case 1:
NSLog(@"Tab 1 selected");
break;
case 2:
NSLog(@"Tab 2 Selected");
break;
}
}
提前谢谢。