iphone - NSUserDefaults 记住 View

标签 iphone objective-c xcode nsuserdefaults

我的应用程序包含几个 View ,我想在应用程序启动且用户尚未完成向导时显示一个小设置。 我知道我可以使用 NSUserDefaults 实现此目的,但我不确定如何使其根据 NSUserDefaults 存储的输入字符串显示特定 View 。

我的AppDelegate.m:

- (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;
    }

然后在 viewcontroller 文件中,我根据 jfaller 的建议添加了以下代码:

- (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];
}

但是我怎样才能做到这一点,以便它显示在设置中选择的特定 View ?

最佳答案

就我个人而言,我会执行以下操作:

每次用户进入向导中的新 View 时,请在用户默认值中记录 UIViewController:

- (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];
}

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

- (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.
}

关于iphone - NSUserDefaults 记住 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13481296/

相关文章:

iPhone 开发者许可证

objective-c - 有人可以向我解释为什么我在以下代码段中“需要”一个保留语句吗?

objective-c - iOS FaceBook 连接不发布图片

iphone - 被触摸的 UIView 的名称

iphone - 如何创建或稳定 FMDB 中两个表之间的关系?

objective-c - CocoaPods: "Generating support files"耗时太长,无论如何要改进?

iphone - 发行通用的iPhone和iPad应用程序

ios - 我应该在 viewDidLayoutSubviews() 中调用 layoutIfNeeded

iphone - 从 app1 启动 app2 并传递数据

ios - 了解 numberForPlot : and numberOfRecordsForPlot: Core Plot