我在尝试加载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 ......)但它没有显示任何内容
EDIT2: 这是我的JSON格式,以防它可以提供帮助:
[
{
"CodeAbsence" : "6000",
"Content" :
[
{
"Init":"DAS",
"Nom":"Name",
"Prenom":"Firstname",
"IdAbsence":"619",
"TimbreusePresent":"O",
"TimbreuseHeure":"14:44",
"TimbreuseRaison":"0",
"TimbreuseDate":"",
"CodeAbsence":"6000",
"Telephone":"248"
},
....
]
},
.......
]
答案 0 :(得分:1)
您需要重新加载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任务之前,请务必切换回主线程。
答案 1 :(得分:0)
我终于找到了问题所在。它来自使用viewDidLoad()
而不是viewDidAppear()
。