我在我的应用程序的设置菜单中有一个UISwitch,我在尝试让初始状态“开启”时遇到困难。即使我在属性检查器中将初始状态设置为“on”,它仍然会在第一次打开时将其设置为“off”。
基本上,当应用程序第一次打开时,开关将设置为“关闭”,但如果您更改它,它会保存状态,以便正常工作。
这是我的代码:
@IBAction func dupOffOnSwitch(sender: AnyObject) {
if dupSwitch.on == true {
autoAdjust = true
println(autoAdjust)
} else {
autoAdjust = false
println(autoAdjust)
}
override func viewWillAppear(animated: Bool) {
dupSwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
println(NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings"))
}
'autoAdjust'在import UIKit下声明为true。
答案 0 :(得分:2)
为了在您首次启动应用时将NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
设置为true
,您可以使用以下代码替换AppDelegate类的application:didFinishLaunchingWithOptions:
方法:
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
//If app has never been launched...
if !NSUserDefaults.standardUserDefaults().boolForKey("isNotFirstLaunch") {
//Set autoAdjustSettings and isNotFirstLaunch to true
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "autoAdjustSettings")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "isNotFirstLaunch")
//Sync NSUserDefaults
NSUserDefaults.standardUserDefaults().synchronize()
}
return true
}
当然,您可以在UIViewController子类中执行上一个代码,但AppDelegate应该是这些设置的位置。
完成后,您的UIViewController子类应如下所示:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var dupSwitch: UISwitch!
@IBAction func dupOffOnSwitch(sender: AnyObject) {
dupSwitch.on = (sender as UISwitch).on //Bool
NSUserDefaults.standardUserDefaults().setBool(dupSwitch.on, forKey: "autoAdjustSettings")
NSUserDefaults.standardUserDefaults().synchronize()
}
override func viewDidLoad() {
super.viewDidLoad()
dupSwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
除非您有充分的理由,否则我认为您不需要在UIViewController子类中使用viewWillAppear:
方法来处理NSUserDefaults语句。 viewDidLoad:
应该是适合的地方。
答案 1 :(得分:0)
我通过添加以下内容解决了我的问题:
dupSwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings")
println(NSUserDefaults.standardUserDefaults().boolForKey("autoAdjustSettings"))
userReturnedAuto = NSUserDefaults.standardUserDefaults().boolForKey("userReturnedAuto")
if userReturnedAuto == false {
dupSwitch.on = true
userReturnedAuto = true
NSUserDefaults.standardUserDefaults().setBool(userReturnedAuto, forKey: "userReturnedAuto")
NSUserDefaults.standardUserDefaults().setBool(userReturnedAuto, forKey: "autoAdjustSettings")
}
可能不是理想的解决方案,但它有效。