【问题标题】:My string set using UserDefaults coming up as nil when I try to access it当我尝试访问它时,我使用 UserDefaults 设置的字符串显示为 nil
【发布时间】:2016-11-01 08:27:05
【问题描述】:

如下面的代码所示...

当我按下保存按钮时,它会将文本字段输入保存为用户默认值,以便我可以在标签中显示它。这很好用,因为当我保存输入时标签会立即显示。

我添加了滑动手势来翻转包含标签的 UIView 并显示另一个图像。但是当我想用滑动将它翻转回来时,它会显示一个错误,说标签现在为零??

我是新手,如果这是一个容易修复的简单愚蠢的错误,请原谅我。

感谢您的帮助。

ViewController.swift 文件

  import UIKit

class ViewController: UIViewController {

var back: UIImageView!

@IBOutlet weak var plateView: UIView!
@IBOutlet weak var text: UITextField!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var saveBtn: UIButton!

var showingFront = true

let defaults = UserDefaults.standard

override func viewDidLoad() {
    super.viewDidLoad()

    back = UIImageView(image: UIImage(named: "back.png"))

    let swipe = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swiped))
    swipe.direction = UISwipeGestureRecognizerDirection.left
    plateView.addGestureRecognizer(swipe)

    label.backgroundColor = UIColor(patternImage: UIImage(named: "blank.png")!)

    saveBtn.isHidden = true

}


func swiped() {

    if (showingFront) {

        UIView.transition(from: label, to: back, duration: 1, options: UIViewAnimationOptions.transitionFlipFromRight, completion: nil)

        showingFront = false

    } else {


        UIView.transition(from: back, to: label, duration: 1, options: UIViewAnimationOptions.transitionFlipFromLeft, completion: nil)

        showingFront = true

    }
}


@IBAction func editingDidBegin(_ sender: Any) {

    saveBtn.isHidden = false
    label.isHidden = true
    text.isHidden = false
}

@IBAction func save(_ sender: Any) {

    defaults.set(text.text, forKey: "number")
    defaults.synchronize()
    let num = defaults.string(forKey: "number")
    label.text = num

    label.isHidden = false
    saveBtn.isHidden = true

    view.endEditing(true)

}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

【问题讨论】:

  • 您能否分享您的 Storyboard/xib 的图像以获得更清晰的图像。
  • 完成。还更新了代码,使其更简洁、更有意义

标签: ios swift label nsuserdefaults textfield


【解决方案1】:

我假设你的代码现在只是一个测试。

尝试同步 userDefaults 以便它们被系统写入:

defaults.set(text.text, forKey: "number")
defaults.synchronize()

...

此外,defaults.string(forKey: ...) 返回一个可选项,因为它可能由于多种原因而失败。

if let num = defaults.string(forKey: "number") {
    lab.text = num
}

【讨论】:

  • 当我按下保存时它可以工作,因为它必须显示在标签中。但是当我滑动以翻转它,然后尝试再次滑动以翻转回标签时,它显示为 nil。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多