2012-06-23 52 views
0

我在我的應用程序中有一個設置視圖,可以讓用戶選擇其中一個選項卡,顯示來自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。然後我可以導航到設置選項卡,它會顯示選中的視頻。現在,如果沒有選擇任何東西,我可以再次進入佈道標籤,現在它將進入視頻講道。爲什麼直到我進入設置後,它纔得到要更改的消息?

回答

0

問題是,在調用UIAlertViewclickedButtonAtIndex:選擇器之前,您已經加載了根視圖。在AppDelegate中啓動UIAlertView後,應用程序會繼續在後臺加載根視圖。

viewWillAppear在選擇UIAlertView選項時已經運行。

爲了解決這個問題,我建議將另一個根視圖作爲您的初始視圖。如果您正在使用故事板,請讓一個segue轉到視圖控制器,以啓動您的警報視圖,另一個segue轉到您的標籤頁。第一次啓動時,繼續進入警報視圖頁面,否則繼續到標籤頁。這樣你的NSUserDefaults@"videosermons"鍵可以在標籤視圖加載之前設置。

相關問題