首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUserDefaults记忆视图

NSUserDefaults记忆视图
EN

Stack Overflow用户
提问于 2012-11-21 04:12:36
回答 2查看 255关注 0票数 2

我的应用程序包含几个视图,我想在应用程序启动时显示一个小设置,而用户还没有完成向导。我知道使用NSUserDefaults可以做到这一点,但我不确定如何才能根据NSUserDefaults存储的输入字符串显示特定的视图。

我的AppDelegate.m:

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    NSString *controllerName = [[NSUserDefaults standardUserDefaults] objectForKey:@"WIZARD_VIEW"];
    if ([controllerName length]) {
        Class controllerClass = NSClassFromString(controllerName);
        UIViewController *controller = [[controllerClass alloc] init];

    // Override point for customization after application launch.
    return YES;
    }

然后,在视图控制器文件中,我添加了以下代码作为来自jfaller的建议:

代码语言:javascript
复制
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSUserDefaults* standard=[NSUserDefaults standardUserDefaults];
    [standard registerDefaults: @{ @"WIZARD_VIEW" : [[self class]description]} ];    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSUserDefaults* standard=[NSUserDefaults standardUserDefaults];
    [standard registerDefaults: @{ @"WIZARD_VIEW" : [[self class]description]} ];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

但是,我如何才能使其显示在设置中选择的特定视图?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-21 04:40:30

就我个人而言,我会做以下事情:

每次用户转到向导中的新视图时,在user defaults中记录UIViewController:

代码语言:javascript
复制
- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
  [[NSUserDefaults standardUserDefaults] setObject:[[self class] description] forKey:WIZARD_VIEW];
  [[NSUserDefault standardUserDefaults] synchronize];
}

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];
  [[NSUserDefaults standardUserDefaults] removeObjectForKey:WIZARD_VIEW];
  [[NSUserDefault standardUserDefaults] synchronize];
}

当用户重新启动应用程序时(假设在向导中间),重新加载视图:

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application
    willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // etc.
  NSString *controllerName = [[NSUserDefaults standardUserDefaults] objectForKey:WIZARD_VIEW];
  if ([controllerName length]) {
    Class controllerClass = NSClassFromString(controllerName); 
    NSViewController *controller = [[controllerClass alloc] init];
    // push the controller, or whatever....
  }
  // etc.
}
票数 3
EN

Stack Overflow用户

发布于 2012-11-21 04:36:39

在视图加载时,将视图写入NSUserDefaults。然后检查didFinishLaunchingWithOptions中的值。

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"current_setup"] isEqualToString:@"1"]) {

         //on view 1!   

    }

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

https://stackoverflow.com/questions/13481296

复制
相关文章

相似问题

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