我在我的應用程序中有一個設置視圖,可以讓用戶選擇其中一個選項卡,顯示來自Podcast的mp3提要或來自播客的mov提要。我在第一次運行應用程序時將其設置爲顯示AlertView,詢問他們喜歡什麼。我這樣做,這個在的applicationDidFinishLaunching:NSUserDefaults沒有完全適用於設置中的應用程序
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults boolForKey:@"notFirstRun"]) {
UIAlertView *firstrun = [[UIAlertView alloc] initWithTitle:@"Sermon Preference" message:@"Do you prefer audio only, or video sermons? (This setting can be changed at any time in the Settings Page.)" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Audio", @"Video", nil];
[firstrun show];
[firstrun release];
[defaults setBool:YES forKey:@"notFirstRun"];
}
然後我設置在導航控制器的AppDelegate中
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *nope = @"Audio";
[defaults setObject:nope forKey:@"videosermons"];
[defaults synchronize];
}
if (buttonIndex == 1) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *yup = @"Video";
[defaults setObject:yup forKey:@"videosermons"];
[defaults synchronize]; }
}
在根視圖(這是說教的音頻列表中)講道我設置這個在viewWillAppear中:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *currently = [defaults objectForKey:@"videosermons"];
if ([currently isEqualToString:@"Video"]) {
self.videoView = [[[VideoPodcastTableView alloc] initWithNibName:@"VideoPodcastTableView" bundle:[NSBundle mainBundle]] autorelease];
[self.navigationController pushViewController:_videoView animated:NO]; }
if ([currently isEqualToString:@"Audio"]) {
}
我還設置了一個設置選項卡與segmentControl以反映已被選中。這是問題:
如果我點擊firstRun彈出窗口中的Video,然後直接進入Sermons選項卡,它會保留在Audio Sermons。然後我可以導航到設置選項卡,它會顯示選中的視頻。現在,如果沒有選擇任何東西,我可以再次進入佈道標籤,現在它將進入視頻講道。爲什麼直到我進入設置後,它纔得到要更改的消息?