使用 storyboardID 检测首次启动
using storyboardID to detect first launch
使用 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;
}
我正在以编程方式创建导航控制器。另一件奇怪的事情是,第一个启动视图控制器(总是显示)上面有一个透明的导航栏。但是,当我推送到另一个视图控制器(通过呈现它)时,第二个视图控制器顶部没有导航栏。考虑到我正在将导航控制器移至新的视图控制器,我不确定为什么会这样。
您正在将局部变量 hasLaunched
设置为 YES
,但您并未将此变量存储在 NSUserDefaults
-
中
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
bool hasLaunched = [defaults boolForKey:@"hasLaunched"];
if (!hasLaunched) {
storyboardID = @"firstLaunch";
[defaults setBool:YES forKey:@"hasLaunched"];
}
else {
storyboardID = @"notFirstLaunch";
}
你的第二个问题我不是很明白。我建议你再问一个问题,并附上你的问题的屏幕截图。
使用 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;
}
我正在以编程方式创建导航控制器。另一件奇怪的事情是,第一个启动视图控制器(总是显示)上面有一个透明的导航栏。但是,当我推送到另一个视图控制器(通过呈现它)时,第二个视图控制器顶部没有导航栏。考虑到我正在将导航控制器移至新的视图控制器,我不确定为什么会这样。
您正在将局部变量 hasLaunched
设置为 YES
,但您并未将此变量存储在 NSUserDefaults
-
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
bool hasLaunched = [defaults boolForKey:@"hasLaunched"];
if (!hasLaunched) {
storyboardID = @"firstLaunch";
[defaults setBool:YES forKey:@"hasLaunched"];
}
else {
storyboardID = @"notFirstLaunch";
}
你的第二个问题我不是很明白。我建议你再问一个问题,并附上你的问题的屏幕截图。