Swift 2.0 上的 NSUserDefaults 错误
NSUserDefaults errors on Swift 2.0
出于某些原因,我似乎无法让我的 NSUserDefaults 在 Swift 2.0 下正常工作。它在旧版本下工作正常,但在 Swift 2.0 下,它不起作用。我知道 Swift 2.0 的编码已更改,但出于某种原因,一旦我离开该页面,表格视图中填写的所有信息都会消失。有什么建议吗?
import UIKit
class MainTableViewController: UITableViewController, UITextFieldDelegate {
@IBOutlet weak var name: UITextField!
@IBAction func btnSave() {
let userDefaults = NSUserDefaults.standardUserDefaults()
if name.text == "" {
let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
let userDefaults = NSUserDefaults.standardUserDefaults()
NSUserDefaults.standardUserDefaults().setObject(name, forKey:"name")
userDefaults.synchronize()
}
override func viewDidLoad() {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(" ", forKey: "name")
super.viewDidLoad()
}
}
在您的 viewDidLoad
中,您正在删除 name 中的信息,因此每次您进入视图时,它都会被删除。
override func viewDidLoad() {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(" ", forKey: "name")
super.viewDidLoad()
}
此外,由于 name
是一个 UITextField 而不是一个字符串,当您保存您的名字时,应该这样做:
NSUserDefaults.standardUserDefaults().setObject(name.text, forKey:"name")
而不是这个:
NSUserDefaults.standardUserDefaults().setObject(name, forKey:"name")
此外,在您的 btnSave()
方法中,如果 name.text 等于“”,您只会保存它。因此,如果您输入任何其他信息,则不会保存。我建议修改它,使其看起来像这样(您也可以使用 guard
而不是 if name.text
):
@IBAction func btnSave() {
if name.text == "" {
let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
return
}
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(name.text, forKey:"name")
userDefaults.synchronize()
}
P.S:请记住,NSUserDefaults
用于用户偏好。我建议不要将大量数据保存到 NSUserDefaults 中。
也许试试这个
import UIKit
class MainTableViewController: UITableViewController, UITextFieldDelegate {
let userDefaults = NSUserDefaults.standardUserDefaults()
@IBOutlet weak var name: UITextField!
@IBAction func btnSave() {
if name.text == "" {
let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
} else {
userDefaults.setObject(name.text, forKey:"name")
userDefaults.synchronize()
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
name.text = userDefaults.stringForKey("name")
}
}
出于某些原因,我似乎无法让我的 NSUserDefaults 在 Swift 2.0 下正常工作。它在旧版本下工作正常,但在 Swift 2.0 下,它不起作用。我知道 Swift 2.0 的编码已更改,但出于某种原因,一旦我离开该页面,表格视图中填写的所有信息都会消失。有什么建议吗?
import UIKit
class MainTableViewController: UITableViewController, UITextFieldDelegate {
@IBOutlet weak var name: UITextField!
@IBAction func btnSave() {
let userDefaults = NSUserDefaults.standardUserDefaults()
if name.text == "" {
let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
let userDefaults = NSUserDefaults.standardUserDefaults()
NSUserDefaults.standardUserDefaults().setObject(name, forKey:"name")
userDefaults.synchronize()
}
override func viewDidLoad() {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(" ", forKey: "name")
super.viewDidLoad()
}
}
在您的 viewDidLoad
中,您正在删除 name 中的信息,因此每次您进入视图时,它都会被删除。
override func viewDidLoad() {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(" ", forKey: "name")
super.viewDidLoad()
}
此外,由于 name
是一个 UITextField 而不是一个字符串,当您保存您的名字时,应该这样做:
NSUserDefaults.standardUserDefaults().setObject(name.text, forKey:"name")
而不是这个:
NSUserDefaults.standardUserDefaults().setObject(name, forKey:"name")
此外,在您的 btnSave()
方法中,如果 name.text 等于“”,您只会保存它。因此,如果您输入任何其他信息,则不会保存。我建议修改它,使其看起来像这样(您也可以使用 guard
而不是 if name.text
):
@IBAction func btnSave() {
if name.text == "" {
let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
return
}
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(name.text, forKey:"name")
userDefaults.synchronize()
}
P.S:请记住,NSUserDefaults
用于用户偏好。我建议不要将大量数据保存到 NSUserDefaults 中。
也许试试这个
import UIKit
class MainTableViewController: UITableViewController, UITextFieldDelegate {
let userDefaults = NSUserDefaults.standardUserDefaults()
@IBOutlet weak var name: UITextField!
@IBAction func btnSave() {
if name.text == "" {
let alert = UIAlertController(title: "Data", message: "Missing Name.", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
} else {
userDefaults.setObject(name.text, forKey:"name")
userDefaults.synchronize()
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
name.text = userDefaults.stringForKey("name")
}
}