当我在viewDidLoad()中调用callapi()函数时,callapi中的println()打印其中包含Post对象的posts数组,但viewDidLoad()函数中的println()会打印一个空数组。此外,当我构建项目时,我收到此错误“致命错误:数组索引超出范围”。 tableView函数中的println()语句也打印一个空数组。似乎在API的数据到达之前表格已经呈现,我该如何解决?
var posts = [Post]()
override func viewDidLoad() {
super.viewDidLoad()
callapi()
println(self.posts)
}
func callapi(){
request(.GET, "url")
.responseJSON { (request, response, data, error) in
let json = JSON(data!)
if let jsonArray = json.array {
for post in jsonArray {
var onepost = Post(id:post["id"].stringValue,
title:post["title"].stringValue,
author:post["author"].stringValue,
post:post["post"].stringValue,
created_on:post["created_on"].stringValue,
updated_on:post["updated_on"].stringValue)
self.posts.append(onepost)
println(self.posts)
self.tableView.reloadData()
}
}
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath
indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "Cell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier,
forIndexPath: indexPath) as! CustomTableViewCell
println(self.posts)
let post = self.posts[indexPath.row]
// Configure the cell...
cell.titleLabel!.text = self.posts[indexPath.row].title
cell.postLabel.text = post.post
println(self.posts)
return cell
}
答案 0 :(得分:2)
调用viewDidLoad
时,它会启动异步callapi
,但到viewDidLoad
完成时,posts
仍为空。但是表格视图仍然会继续其初始加载过程,即使尚未填充posts
,因此您必须确保tableView:numberOfRowsInSection:
此时返回零。
稍后,callapi
完成了Alamofire GET
请求并致电reloadData
。只有在此时{@ 1}}才会返回非零值。
最重要的是,请确保tableView:numberOfRowsInSection:
返回tableView:numberOfRowsInSection:
中的实际条目数,然后才能解决问题。
答案 1 :(得分:2)
只需在viewDidAppear中插入重新加载即可:
override func viewDidAppear(animated: Bool) {
self.tableView.reloadData()
}
答案 2 :(得分:0)
确保你设置tableView:numberOfRowsInSection:返回self.posts.count