在 Swift 中将标签保存在 NSUserDefault 中

Saving Labels in NSUserDefault in Swift

所以在我正在创建的应用程序中,我有一个设置视图控制器,用户可以在其中的文本字段中键入他们的信息,然后当他们单击完成按钮时,它会将所有信息加载到主视图控制器上的标签中。如何使用 NSUserDefault 将数据保存在主视图控制器中?我正在使用两个视图控制器。

设置视图控制器

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
            let DestViewController = segue.destinationViewController as! home
            DestViewController.NameText = NameTextField.text!
            DestViewController.positionText = positionTextField.text!
            DestViewController.divisionText = divisionTextField.text!
            DestViewController.routeText = routeTextField.text!
            DestViewController.routeText = routeTextField.text!
            DestViewController._picture = _picture.image!

        NSUserDefaults.standardUserDefaults().setValue(NameTextField.text!, forKey: "name")
        NSUserDefaults.standardUserDefaults().setValue(positionTextField.text!, forKey: "position")
        NSUserDefaults.standardUserDefaults().setValue(divisionTextField.text!, forKey: "division")
        NSUserDefaults.standardUserDefaults().setValue(routeTextField.text!, forKey: "route")
        NSUserDefaults.standardUserDefaults().setValue(_picture, forKey: "ImageKey")
        }

主页视图控制器

class home: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var Name: UILabel!
    @IBOutlet weak var position: UILabel!
    @IBOutlet weak var division: UILabel!
    @IBOutlet weak var route: UILabel!


   var contacts = MyContacts()
   var NameText = String()
   var positionText = String()
   var divisionText = String()
   var routeText = String()
   var _picture: UIImage!


   override func viewDidLoad() {
    super.viewDidLoad()

Name!.text = NSUserDefaults.standardUserDefaults().stringForKey("name")
position!.text = NSUserDefaults.standardUserDefaults().stringForKey("position")
division!.text = NSUserDefaults.standardUserDefaults().stringForKey("division")
route!.text = NSUserDefaults.standardUserDefaults().stringForKey("route")
Profile!.image = _picture
}

所有这些代码都完美无缺,我只是想知道您是否可以帮助我将标签保存在 NSUserDefault 中,以便每次加载应用程序时所有信息仍然存在。我对这个主题做了很多研究,但可以找到解决我的问题的方法。任何帮助将不胜感激。

我创建了以下 2 个函数,它们使用 NSUserDefault 保存和检索数据。参考并相应使用。

func saveDataInUserDefault()
{
    // *** init NSUserDefaults ***
    let userDefaults = NSUserDefaults()

    // *** Init a UIImage, you can use your UIImage instead ***
    let img = UIImage.init(imageLiteral: "image")

    // *** set values in UserDefault as well image ***
    userDefaults.setObject("value of name textfield", forKey: "name")
    userDefaults.setObject("value of position textfield", forKey: "position")
    userDefaults.setObject("value of division textfield", forKey: "division")
    userDefaults.setObject("value of route textfield", forKey: "route")
    // *** convert image to NSData and store it ***
    userDefaults.setObject(UIImageJPEGRepresentation(img, 1.0), forKey: "image")

    // *** save all the changes to NSUserDefaults ***
    userDefaults.synchronize()
}

func getDataFromUserDefaults()
{
    // *** Now lets access all the stored data from user default ***

    // *** init NSUserDefaults ***
    let userDefaults = NSUserDefaults()

    // *** to get normal objects use following ***
    print(userDefaults.objectForKey("name"))

    // *** to load image use following ***
    let img = UIImage(data:userDefaults.objectForKey("image") as! NSData)        
}

只需使用基本语法:

NSUserDefaults.standardUserDefaults().setValue(value, forKey:key)

保存示例:-

NSUserDefaults.standardUserDefaults().setValue(positionTextField.text!, forKey: "position")

检索示例:-

position!.text=NSUserDefaults.standardUserDefaults().stringForKey("position")

注意:记住密钥必须是唯一的。