gpt4 book ai didi

ios - 异步请求完成后选择表后运行 segue

转载 作者:行者123 更新时间:2023-11-28 21:42:35 26 4
gpt4 key购买 nike

我正在尝试运行一个 url 请求以在选择某个表行后获取 JSON 文件,基于该行,一个唯一 ID 随 URL 请求一起发送,并生成一个不同的 JSON。这是我的 prepareforSegue

    // MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
var divisionScene = segue.destinationViewController as! DivisionViewController

// Pass the selected object to the new view controller.
if let indexPath = tableView.indexPathForSelectedRow() {
let arrayIndex = indexPath.row
//println("Index: \(arrayIndex)")

torneoIDTransfer = torneos[arrayIndex].torneoID
//println("\(torneoIDTransfer)")


//check second url with second request type same token
//sets url to string using token
let tercerURL = NSURL(string: "http://api.zione.mx/get.json.asp?tr=3&tkn=\(tkn)&tor=\(torneoIDTransfer)")

//initializes request

let request = NSURLRequest(URL: tercerURL!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.currentQueue()) { response, jsonDataRequest3, error in
let dataRequest3 = jsonDataRequest3

//takes data, saves it as json
let tercerJSON = JSON(data: jsonDataRequest3)

//checks to see that contents != nil, meaning the JSON file was found
if tercerJSON != nil {

//checks amount of tournaments available in order to generate table.
let divisionCount = tercerJSON["lista-divisiones"].count
//sets global variable numero de torneos
numeroDeDivisiones = divisionCount


//for loop to go insert into Torneo nuevo each ID and name by using count from above
for var index = 0; index < divisionCount; ++index {
var divisionID = Int(tercerJSON["lista-divisiones" ][index]["DivisionID"].number!)
var nomDivision = tercerJSON["lista-divisiones"][index]["nomDivision"].string
//println("\(divisionID)")
//println("\(nomDivision)")
var divisionNuevo = listaDivisiones(divisionID: divisionID, nomDivision: nomDivision!)
divisiones.append(divisionNuevo)
numeroDeDivisiones = 10
print("WHO IS FIRST")
}
}
print("\(divisiones[0].nomDivision)")
}
}
}

我通过从表格单元格拖动到新的 View Controller 来创建我的赛格威。但是,当我单击表格单元格时,转换会立即发生,在请求有机会完成之前,因此不会显示任何数据。

最佳答案

最好在用户选择表格行之前很久就在后台获取和处理数据。如果这不可能,那么我建议让您的目标 View Controller 执行 URL 请求。 URL 请求是异步发生的,因此它永远不会在您的源 View Controller 被释放之前完成。

在您的源 View Controller 中,修改prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var divisionScene = segue.destinationViewController as! DivisionViewController

if let indexPath = tableView.indexPathForSelectedRow() {
let arrayIndex = indexPath.row

torneoIDTransfer = torneos[arrayIndex].torneoID

let tercerURL = NSURL(string: "http://api.zione.mx/get.json.asp?tr=3&tkn=\(tkn)&tor=\(torneoIDTransfer)")

divisionScene.fetchDataAtURL(tercerURL)
}
}

您需要在目标 View Controller 中定义一个方法来处理抓取。

func fetchDataAtURL(URL: NSURL) {
let request = NSURLRequest(URL: tercerURL!)
NSURLConnection.sendAsynchronousRequest( // ... your fetching logic here
}

您还需要一些逻辑来在数据到达后显示数据。我建议将其放入您的请求的完成回调中(或者更确切地说,让回调触发显示更新)。如果您的 divisionScene 是一个 tableView,您可以调用 reloadData(在更新数据源之后)。如果没有,您将需要一些其他方式来更新 UI。如果您正在更新 UI,请确保将 dispatch 到该部分的主队列。

这样做至少会将 URL 加载责任传递给目标 View Controller ,它至少会在数据最终到达那里时出现。

关于ios - 异步请求完成后选择表后运行 segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31464237/

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