运行指定的ViewController

时间:2017-09-05 16:05:02

标签: ios swift appdelegate

我有一个代码,以便在运行时,如果在上启用了,则会显示指定的 VC

但没有任何反应,在重新启动后,开关会不保存其值。

PLS帮助

SettingsVC.swift

@IBAction func switchChanged(_ sender: UISwitch) {
    UserDefaults.standard.set(sender.isOn, forKey: "isSwitchOn")
}

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let isSwitchOn = UserDefaults.standard.bool(forKey: "isSwitchOn")
    if isSwitchOn {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let VC2 = storyboard.instantiateViewController(withIdentifier: "ViewController")
        self.window!.rootViewController = VC2;
    }
    // Override point for customization after application launch.
    return true
}

修改

override func viewDidLoad() {
    super.viewDidLoad()
    Set.isOn =  UserDefaults.standard.bool(forKey: "isSwitchOn")

    // Do any additional setup after loading the view.
}

1 个答案:

答案 0 :(得分:1)

我在这里注意到两件事:

AppDelegate.swift

每当您以编程方式调整窗口的根视图控制器时,需要调用window?.makeKeyAndVisible来显示新屏幕。

UserDefaults

目前,您的代码不保证在重新启动之间保存用户默认值。 UserDefaults会选择自己的时间将数据保存到磁盘上,如果在此之前退出应用程序,则无法及时保存。

我相信在模拟器上,如果你停止通过Xcode运行模拟器,这种情况总会发生。由于这是非常重要的行为,您可能需要调用UserDefaults.standard.synchronize强制保存。

请注意,此通话通常会在特定时间间隔内自动完成;你明确地这样做是因为你不能错过它。