迅速将持久数据从一个视图控制器传递到另一个视图控制器并存储在标签数组中

问题描述

我正在使用 segue 从视图控制器 1 转到视图控制器 2。视图控制器 1 有一个按钮,用于在单击时设置持久数据:

我为用户默认声明了一个全局变量:

   let userDefault = UserDefaults()

这是我的按钮,用于将用户默认设置为带有标签文本值的字符串:

 @IBAction func saving(_ sender: UIButton) {
    let savedText = "Gallon \(gallonTextFieldOutlet.text) is equal to Litre \(litreTextFieldOutlet.text) is equal to Pint \(pintTextFieldOutlet.text)"
    userDefault.setValue(savedText,forKey: "SavedConversion")
}

然后我获得对视图控制器 2 的引用,并在用户通过 segue 从视图控制器 1 转到视图控制器 2 时传递此用户默认值:

  // in view controller 2: reference to get persistent data
    var volumeDataOne:String?
   // in view controller 2: instantiation of my queue class to use methods
   var queue = Queue<String>()

   // segue action in view controller 1
    override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
    if segue.identifier == "savedVolumeData"
    {
       let historyVC:VolumeHistoryViewController = segue.destination as! VolumeHistoryViewController
        
        if let value = userDefault.value(forKey: "SavedConversion") as? String {
        historyVC.volumeDataOne = value
        }
    }

我在 View Controller 2 中得到了这个,我试图将它设置为我在这个 View Controller 中的三个标签:

  func DisplayVolumeHistory() {
    
    let labelArray = [volumeDataLabelOutlet,volumeDataLabelTwoOutlet,volumeDataLabelThreeOutlet]

        if let bindingOptional = volumeDataOne
        {
            for index in 0..<labelArray.count
            {
            queue.enqueue(val: bindingOptional)
            labelArray[index]?.text = queue.arr[index]
            }
    }
}

在我的规范中,我被告知数据需要持久化,并且一次只能存储最后五个数据。所以我有一个我称之为 Queue 的类,它在这个函数中被引用。这个函数在 View Controller 2 的 viewDidLoad 上被调用。

  override func viewDidLoad() {
    super.viewDidLoad()
    
    //Debug ...
    volumeDataLabelOutlet.text = "na"
    volumeDataLabelTwoOutlet.text = "na 2"
    volumeDataLabelThreeOutlet.text = "na 3"
    //...
    
    DisplayVolumeHistory()
    // Do any additional setup after loading the view.
}

我已经在 Playground 中测试了我的 Queue 类,它按预期工作。 Queue 类可以在这里看到:

类队列{

var arr = [T]()

func enqueue(val: T){
    if(arr.count < 3) {
        arr.append(val)
    } else {
        for i in 0..<arr.count-1 {
            arr[i] = arr[i + 1]
        }
        arr[arr.count - 1] = val
    }
}

func dequeue() -> (T?){
    if (arr.isEmpty){
        return nil
    } else {
        return arr.remove(at: 0)
    }
}
}

这是我似乎无法弄清楚的问题。在 View Controller 2 中,三个标签都会有持久化数据,但它们都是相同的数据,

例如,如果我有如下数据:

DATA 1: 555
DATA 2: 700
DATA 3: 62

我想要:

LABEL 1 --> 555
LABEL 2 --> 700
LABEL 3 --> 62

但是,目前它将是:

LABEL 1 --> 62
LABEL 2 --> 62
LABEL 3 --> 62

我不确定为什么要调试。我相信这是因为我的视图控制器 1 中的持久数据只采用一个字符串,当我使用相同的键时,字典会覆盖该字符串。

但是,我查看了文档并尝试使用用户默认数组并没有解决我的问题,我不确定是什么导致了这个问题。

感谢任何帮助我尝试解决此问题的指导和帮助。

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)