首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUserDefaults不能完全用于应用程序中的设置

NSUserDefaults不能完全用于应用程序中的设置
EN

Stack Overflow用户
提问于 2012-06-24 07:22:00
回答 1查看 118关注 0票数 0

我在我的应用程序中有一个设置视图,可以让用户选择显示播客中的mp3s或播客中的mov的选项卡之一。我在第一次运行应用程序时设置了它,以显示一个AlertView,询问他们喜欢什么。我在applicationDidFinishLaunching中这样做:

代码语言:javascript
复制
 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中设置了这个

代码语言:javascript
复制
- (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中设置了以下内容:

代码语言:javascript
复制
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弹出窗口中的视频,然后直接转到布道选项卡,它将停留在音频布道上。然后,我可以导航到Settings选项卡,它将显示Video selected。现在,不需要选择任何内容,我可以再次转到布道选项卡,它现在将转到视频布道。为什么直到我进入设置后,它才能得到要更改的消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-24 10:49:11

问题是,在调用UIAlertView clickedButtonAtIndex:选择器之前,您已经加载了根视图。在AppDelegate中启动UIAlertView之后,应用程序将继续在后台加载根视图。

在选择UIAlertView选项时,viewWillAppear应该已经运行。

为了解决这个问题,我建议使用另一个根视图作为初始视图。如果您使用的是故事板,请让一个段转到启动警报视图的视图控制器,另一个段转到选项卡页。在第一次启动时,分段到警报视图页,否则分段到选项卡页。这样,就可以在加载选项卡视图之前设置NSUserDefaults @"videosermons"密钥。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11173790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档