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
}