我目前正在使用Swift在Xcode 7.2,iOS 9.2中开发应用程序。我想在用户第一次打开应用程序并获取一些数据并永久存储时弹出一个屏幕。我找到了一个线程,其中有人问了类似的东西:Programmatically set the initial view controller using Storyboards已经严格按照说明操作,但我似乎无法按照我想要的方式工作。
以下是我的AppDelegate.swift文件中修改过的代码。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.mainScreen().bounds);
let storyboard = UIStoryboard(name: "Main", bundle: nil);
var initialViewController: UIViewController;
print(NSUserDefaults.standardUserDefaults().boolForKey("firstTime"));
if(!NSUserDefaults.standardUserDefaults().boolForKey("firstTime")){
initialViewController = storyboard.instantiateViewControllerWithIdentifier("FirstTimeScreen");
} else {
initialViewController = storyboard.instantiateViewControllerWithIdentifier("Dashboard");
}
self.window?.rootViewController = initialViewController;
self.window?.makeKeyAndVisible();
return true
}
在ViewController对应的ViewController.swift文件中,应该从第二次开始,在viewDidLoad()方法中,我有以下代码行:
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "firstTime");
目前第一个屏幕始终打开。即使测试了NSUserDefaults值,从第二次开始的屏幕也不是根视图控制器。
我启动了应用程序在单个视图控制器上工作,我目前没有任何导航控制器或任何东西。只是一堆独立的视图控制器,通过按钮segues连接。
感谢您抽出宝贵时间阅读本文,并可能回答这个问题。
答案 0 :(得分:0)
仔细查看您的逻辑,if语句中有!
,这意味着如果firstTime
不为true,它将显示标识为FirstTimeScreen
的视图控制器。您要删除!,以便在第一次启动时显示FirstTimeScreen
。
请务必将false
的{{1}}存储在firstTime
,而不是FirstTimeScreen
。
另外请务必注册NSUserDefaults,Dashboard
设为firstTime
,否则为true
,且不会显示false
。
答案 1 :(得分:0)
您需要将“firstTime”设置为true,而不是false:
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "firstTime");
另外,请确保在此之后使用NSUserDefaults.standardUserDefaults().synchronize()
来保存更改。
答案 2 :(得分:0)
尝试在firstTime
didFinishLaunchingWithOptions
if(NSUserDefaults.standardUserDefaults().objectForKey("firstTime") == nil){
initialViewController = storyboard.instantiateViewControllerWithIdentifier("FirstTimeScreen");
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "firstTime");
NSUserDefaults.standardUserDefaults().synchronize()
} else {
initialViewController = storyboard.instantiateViewControllerWithIdentifier("Dashboard");
}