Я новичок в Swift и внедряю свой первый UIPickerView.Это работает нормально, если я устанавливаю pickerData непосредственно в viewDidLoad
как pickerData = ["item1", "item2"]
.Но мне нужно создать элементы выбора из базы данных Firebase.
Я могу создать элементы выбора просто отлично, используя метод, который извлекает данные из базы данных и создает список.Затем я беру этот список и конструирую предметы для выбора.Я могу напечатать массив, и я вижу, что массив построен правильно.
Но когда массив готов, он, по-видимому, либо снова возвращается к пустому, и мое окно выбора пусто, либо мое окно выбора настраивается до того, как массивбыло завершено, и поэтому оно пустое.
Я пытался использовать 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
Вывод операторов print выглядит следующим образом (обратите внимание, что последний оператор print печатается первым, и он печатает пустой массив!):
снова вот данные выбора: []
["doll ($ 0.75)"]
["doll (0,75 долл. США "," медведь (0,75 долл. США) "]
[" кукла (0,75 долл. США) "," медведь (0,75 долл. США) "," грузовик (0,75 долл. США) "]
[" кукла (0,75 долл. США)) "," bear ($ 0,75) "," truck ($ 0,75) "," blocks ($ 0,75) "]
вот такие данные выбора: [" doll ($ 0,75) "," bear ($ 0,75) ","грузовик (0,75 долл. США) "," блоки (0,75 долл. США) "]