gpt4 book ai didi

ios - 从异步任务加载 UITableViewController 中的值

转载 作者:行者123 更新时间:2023-11-29 02:12:33 24 4
gpt4 key购买 nike

我在尝试加载 UITableViewController 时遇到问题。

我有一个在 loadView 方法中调用的异步任务。这个异步任务运行良好,结果如我所料返回。

问题是,应用程序在尝试填充 TableView 时失败。

我怀疑是调用方法时我的数据没有完全加载所致。

有没有办法强制 TableView 等待我的异步任务完成?

加载我的数据的函数:

func loadNetInformations(){
var postString: NSString = "info=all"

HTTPGet("myurl", "POST", postString){
(data: NSArray, error:String?)-> Void in
if error != nil{
println(error)
}
else{
for value in data{
var sService: NSString = "some value"

var aContent: NSArray = value["Content"] as NSArray

var sNumberCount: NSNumber = aContent.count

self.aListeService.addObject(sService)
self.aSizeOfDpt.addObject(sNumberCount)
self.aContenuListes.addObject(aContent)

self.bFinishLoading = true

} // End for in HTTPGet
} // End else in HTTPGet
} // End HTTPGet

} // End LoadNet Information

我的 HTTPGet 方法如下:

func HTTPSendRequest(request: NSMutableURLRequest,
callback: (NSArray, String?) -> Void){
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in

if error != nil {

callback (NSArray(), error.localizedDescription)
println("error=\(error)")
return
}
else{
callback(NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil)! as NSArray, nil)

}


}
task.resume()
}


func HTTPGet(url: String, requestMethod: String, postString: String, callback: (NSArray, String?) -> Void){
var request = NSMutableURLRequest(URL: NSURL(string: url)!)
request.HTTPMethod = requestMethod
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
HTTPSendRequest(request, callback)
}

编辑:好的,现在我没有错误了(我使用 NSString 作为 NSInteger ...)但它没有显示任何内容

编辑2:这是我的 JSON 格式,以防它有帮助:

[
{
"CodeAbsence" : "6000",
"Content" :
[
{
"Init":"DAS",
"Nom":"Name",
"Prenom":"Firstname",
"IdAbsence":"619",
"TimbreusePresent":"O",
"TimbreuseHeure":"14:44",
"TimbreuseRaison":"0",
"TimbreuseDate":"",
"CodeAbsence":"6000",
"Telephone":"248"
},
....
]
},
.......
]

最佳答案

您需要重新加载 tableView 以触发表更新,并且需要在主 UI 线程上触发它。

        for value in data{
var sService: NSString = "some value"

var aContent: NSArray = value["Content"] as NSArray

var sNumberCount: NSNumber = aContent.count

self.aListeService.addObject(sService)
self.aSizeOfDpt.addObject(sNumberCount)
self.aContenuListes.addObject(aContent)

self.bFinishLoading = true
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}

当您在后台线程上执行异步操作时,您的回调仍将在后台线程上运行,因此请务必在执行任何 UI 任务之前切换回主线程。

关于ios - 从异步任务加载 UITableViewController 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29124064/

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