使用storyboardID检测首次启动

时间:2015-08-17 20:56:33

标签: ios objective-c storyboard nsuserdefaults

使用NSUserDefaults,如果是第一次启动,我可以呈现一个视图,如果不是,则可以呈现另一个视图。我的问题是,无论如何,该计划认为它是第一次发布。我的代码如下(在我的AppDelegate.m文件中):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen ]bounds]];

    NSString *storyboardID;

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    bool hasLaunched = [defaults boolForKey:@"hasLaunched"];

    if (!hasLaunched) {
        storyboardID = @"firstLaunch";
        hasLaunched = YES;
        [defaults synchronize];

    }

    else {
        storyboardID = @"notFirstLaunch";
    }


    UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    UIViewController *viewController = [main instantiateViewControllerWithIdentifier:storyboardID];

    UINavigationController * navControl = [[UINavigationController alloc]initWithRootViewController:viewController];

        self.window.rootViewController = navControl;

        [self.window makeKeyAndVisible];

    return YES;
}

我正在以编程方式创建导航控制器。另一个奇怪的事情是第一个启动视图控制器(总是出现)在它上面有一个透明的导航栏。但是,当我推送到不同的视图控制器(通过呈现它)时,第二个视图控制器顶部没有导航栏。考虑到我正在将导航控制器移动到新的视图控制器,我不确定为什么会出现这种情况。

1 个答案:

答案 0 :(得分:1)

您正在将本地变量hasLaunched设置为YES,但您没有将此变量存储在NSUserDefaults -

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

bool hasLaunched = [defaults boolForKey:@"hasLaunched"];

if (!hasLaunched) {
    storyboardID = @"firstLaunch";
    [defaults setBool:YES forKey:@"hasLaunched"];
}
else {
    storyboardID = @"notFirstLaunch";
}

我真的不明白你的第二个问题。我建议你提出另一个问题并提供你的问题的截屏。