0

アプリに設定ビューがあり、ポッドキャストからのmp3のフィードまたはポッドキャストからのmovのいずれかを表示するタブの1つをユーザーに選択できます。アプリを初めて実行するときに、AlertViewを表示して何を好むかを尋ねるように設定しました。私はapplicationDidFinishLaunchingでこれを使ってそれを行います:

 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ポップアップで[ビデオ]をクリックしてから[説教]タブに直接移動すると、オーディオ説教のままになります。次に、[設定]タブに移動すると、選択したビデオが表示されます。これで、何も選択せずに、もう一度[説教]タブに移動できます。これで、[ビデオ説教]に移動します。設定に移動するまでメッセージが変更されないのはなぜですか?

4

1 に答える 1

0

UIAlertView clickedButtonAtIndex:問題は、セレクターが呼び出される前に、ルートビューを既にロードしていることです。UIAlertViewAppDelegateでを起動した後、アプリケーションはバックグラウンドでルートビューの読み込みを続行します。

viewWillAppearUIAlertViewオプションが選択されるまでに、すでに実行されています。

これを解決するには、最初のビューとして別のルートビューを使用することをお勧めします。ストーリーボードを使用している場合は、1つのセグエをアラートビューを起動するビューコントローラーに移動させ、もう1つのセグエをタブページに移動させます。最初の起動時に、アラートビューページに移動します。それ以外の場合は、タブページに移動します。このようにしてNSUserDefaults @"videosermons"、タブビューがロードされる前にキーを設定できます。

于 2012-06-24T02:49:11.473 に答える