gpt4 book ai didi

ios - pickerView 无法加载在同一 View Controller 中获取的数据(swift)

转载 作者:搜寻专家 更新时间:2023-11-01 07:27:05 25 4
gpt4 key购买 nike

我的 pickerview 无法从同一 View Controller 中获取的数组加载数据。但是,如果我将 fetchHistory 放入另一个 viewController(就在 historyViewController 之前)并通过导航发送数据,pickerView 会显示 confirms 数据。当我将 fetchHistory 放入 historyViewController 时,如何让它工作?或任何建议以某​​种方式放置 fetchHistory 而不是将其放入随机 viewController 的最佳方法?

历史 View Controller

var confirms = [DataWaitingConfirm]() //pickerView DataSource
override func viewDidLoad() {
super.viewDidLoad()

fetchHistory()//fetch data from server for 'confirms'
}

获取数据

func fetchHistory(){

let headers = ["Authorization" : "\(TokenType!) \(Token!)"]
Alamofire.request(.GET, "http://xxxx/history/", headers: headers, encoding: .JSON).responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
print(json)
for (results,subJson):(String, JSON) in json["results"] {
print(subJson["status"].int)
if subJson["status"].intValue == 3 {
print("ada 3")
let orderReference = subJson["px_reference"].stringValue
let date = subJson["invoice_date_str"].stringValue
let totalPaid = subJson["total_paid"].stringValue

let orderPicker = "\(orderReference) \(date) \(totalPaid)"
let confirm = DataWaitingConfirm(orderReference: orderReference, pickerConfirm: orderPicker)
self.confirms += [confirm]
}
}}

}
case .Failure(let error):
spinningActivity.hide(true)
print(error)
self.displayAlertMessage("could not fetch history")
}
}
}

pickerview 委托(delegate)

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

let orderToConfirm = confirms[row]
return orderToConfirm.pickerConfirm
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {


return confirms.count
}

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

}

最佳答案

您需要调用self.pickerView.reloadAllComponents() 来触发刷新。然后将再次调用数据源方法,您更新的数据将显示在选择器 View 中。

您的 Alamofire 请求异步返回,因此您应该在 self.confirms += confirm 之后触发重新加载。

注意:您还可以考虑使用 dispatch_async(dispatch_get_main_queue(), {...})

在主线程上触发它

关于ios - pickerView 无法加载在同一 View Controller 中获取的数据(swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35315813/

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