接続情報 (クライアント ID、サーバー アドレス、ポート番号) の plist を共有する 3 つのタブのアプリケーションがあります。各ビュー コントローラーでは、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"];
}
私のビューの 1 つは、ユーザーが plist を変更できるようにする「設定」ページを表しています。ただし、plist が更新されると、オブジェクトごとに同期が必要になるため、変更がすべてのタブ ビューに反映されるわけではありません。
[defaults synchronize];
viewDidLoad メソッドは、アプリケーションの存続期間中に (少なくともタブ バー アプリケーションの場合は) 1 回しか呼び出されないことを知ったので、同期呼び出しをここに置くことはできません。次に 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;
}
}
ありがとうございます。