问题描述
我正在使用 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 (将#修改为@)