gpt4 book ai didi

ios - 选择器数据的属性不会保留 for 循环的结果

转载 作者:行者123 更新时间:2023-11-29 05:56:42 27 4
gpt4 key购买 nike

我是 Swift 新手,正在实现我的第一个 UIPickerView。如果我像 pickerData = ["item1", "item2"] 一样直接在 viewDidLoad 中设置 pickerData,效果很好。但我需要从 Firebase 数据库构建选取器项目。

我可以使用从数据库中提取数据并创建列表的方法来构建选取器项目。然后我获取该列表并构建我的选择器项目。我可以打印该数组,并且看到该数组已正确构造。

但是当数组完成后,它显然要么再次恢复为空,并且我的pickerview为空,或者我的pickerview在数组完成之前设置,因此它是空的。

我尝试在多个地方使用 Dispatch.main.async - 包括数据检索函数中的完成语句、围绕 pickerData 的构建等。我还尝试将数据检索和构建 pickerData 数组的整个代码放入 viewDidLoad 中,但它始终是相同的。 pickerData 不保留我为其构建的数组,并且 pickerView 为空。

这是我的代码(用 Xcode 10、Swift 4.2 编写),来自 viewDidLoad:

func viewDidLoad() {
// Set up the pickerview
ToyService.getToyList(kid: self.kid!) { (toyList) in
self.pickerData.removeAll()

// Go through each toy item and create a picker item from it

for item in toyList {
// Set up a formatter to work with the price as a string
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2

let price = formatter.string(from: item.price!)
let pickerItem:String = item.title! + " " + "($" + price! + ")"

self.pickerData.append(pickerItem)

print(self.pickerData)
}

print("here's the pickerdata: \(self.pickerData)")
}

print("here's the pickerdata again: \(self.pickerData)")
} // end of viewDidLoad

打印语句的输出如下(注意最后一个打印语句首先打印,并且它打印一个空数组!):

here's the pickerdata again: []

["doll ($0.75)"]

["doll ($0.75)", "bear ($0.75)"]

["doll ($0.75)", "bear ($0.75)", "truck ($0.75)"]

["doll ($0.75)", "bear ($0.75)", "truck ($0.75)", "blocks ($0.75)"]

here's the pickerdata: ["doll ($0.75)", "bear ($0.75)", "truck ($0.75)", "blocks ($0.75)"]

最佳答案

您需要在完成中重新加载 pickerView,因为它是异步的

for item in toyList {   
// ......
self.pickerData.append(pickerItem)
print(self.pickerData)
}
self.pickerView.reloadAllComponents()

关于ios - 选择器数据的属性不会保留 for 循环的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55080468/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com