使用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;
}
我正在以编程方式创建导航控制器。另一个奇怪的事情是第一个启动视图控制器(总是出现)在它上面有一个透明的导航栏。但是,当我推送到不同的视图控制器(通过呈现它)时,第二个视图控制器顶部没有导航栏。考虑到我正在将导航控制器移动到新的视图控制器,我不确定为什么会出现这种情况。
答案 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";
}
我真的不明白你的第二个问题。我建议你提出另一个问题并提供你的问题的截屏。