gpt4 book ai didi

ios - 函数返回之前任务恢复未完成

转载 作者:行者123 更新时间:2023-11-30 13:09:12 24 4
gpt4 key购买 nike

在下面的代码中,我有一个函数调用任务来获取学生位置。任务初始化之前的行被执行,但任务本身似乎没有执行。在我看来,函数中的下一行甚至在任务完成之前就被执行了。所以我尝试了两件事

  1. 添加完成处理程序,但这似乎没有帮助。
  2. 在task.resume()之后添加一个大的for循环,看起来任务在一两种情况下已经完成。但这看起来并不是正确的做法。

有人可以解释一下这是否是另一个线程以及如何使该函数等待该线程完成?我很想知道是否有一种方法可以实现这项工作,以及是否有更好的方法来做到这一点。非常感谢。

func getStudentLocation(completionHandler: (studentDictionary: NSDictionary) -> ()) {

let request = NSMutableURLRequest(URL: NSURL(string: "https://parse.udacity.com/parse/classes/StudentLocation")!)
request.addValue("QrX47CA9cyuGewLdsL7o5Eb8iug6Em8ye0dnAbIr", forHTTPHeaderField: "X-Parse-Application-Id")
request.addValue("QuWThTdiRmTux3YaDseUSEpUKo7aBYM737yKd4gY", forHTTPHeaderField: "X-Parse-REST-API-Key")
let session = NSURLSession.sharedSession()
print("starting task")
let task = session.dataTaskWithRequest(request) { (data, response, error) in
print("getStudentLocation in task: \(error) \(response)")
if error != nil { // Handle error...
print(" error in get student location: \(error)")
return
}

let parsedResult: AnyObject
do {
parsedResult = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
}
catch {
return
}
self.studentDictionary = parsedResult["results"] as? [String: AnyObject]
// completionHandler(studentDictionary: self.studentDictionary!)
print("STudent Dictonary: \(self.studentDictionary)")
}

task.resume()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
getStudentLocation{
studentDictionary in
//studentDictionary.count
print("Count: \(studentDictionary.count)")
}
return studentDictionary!.count
}

最佳答案

dataTaskWithRequest() 在后台运行。这就是为什么你的函数在 task.resume() 之后立即返回。

要在 tableView 中显示下载的数据,您必须在 task 的完成处理程序末尾重新加载其数据。就在 self.studentDictionary = parsedResult["results"] 之后? [字符串:AnyObject]

关于ios - 函数返回之前任务恢复未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38929350/

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