4

当我在 viewDidLoad() 中调用 callapi() 函数时,callapi 中的 println() 会打印包含 Post 对象的帖子数组,但是 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
}
4

3 回答 3

3

viewDidLoad被调用时,它开始异步callapi,但到时间viewDidLoad结束时,posts仍然是空的。但是表格视图仍将继续其初始加载过程,即使posts尚未填充,因此您必须确保tableView:numberOfRowsInSection:此时返回零。

稍后,callapi完成 AlamofireGET请求并调用reloadData. 只有在这一点上应该tableView:numberOfRowsInSection:返回非零值。

最重要的是,确保tableView:numberOfRowsInSection:返回 中的实际条目数posts,并且应该解决问题。

于 2015-04-19T11:03:30.707 回答
2

只需在 viewDidAppear 中插入重新加载,就可以了:

override func viewDidAppear(animated: Bool) {
        self.tableView.reloadData()
    }
于 2016-09-26T20:48:03.633 回答
0

确保设置 tableView:numberOfRowsInSection: 返回 self.posts.count

于 2015-04-19T11:02:50.210 回答