Я новичок в IOS и быстро. Я пытаюсь реализовать запрос api get, который возвращает json, а затем отображает его в таблице. Ниже мой текущий код. Когда я бег имитатора я получаю следующее сообщение об ошибке:IOS/Swift таблица рендеринга после запроса JSON
фатальной ошибка: Не удаюсь индексом пустого буфера
Если удалить жёстко прописанное возвращение 3 в функции Tableview и вместо того, чтобы не использовать doDatItems.count ничего делает в таблице, потому что я догадайтесь, что массив doDatItems пуст до запроса запроса. Кажется, что это время? Как обеспечить, чтобы запрос запроса был выполнен до загрузки таблицы?
import UIKit
class ViewController: UIViewController, UITableViewDelegate {
var doDatItems:[String] = []
@IBOutlet weak var doDatItem: UITextField!
@IBOutlet weak var yourDoDats: UILabel!
@IBAction func addDoDat(sender: AnyObject) {
doDatItems.append(doDatItem.text)
println(doDatItems)
}
override func viewDidLoad() {
super.viewDidLoad()
let urlPath = "http://localhost:3000/dodats"
let url: NSURL = NSURL(string: urlPath)!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
println("Task completed")
if((error) != nil) {
// If there is an error in the web request, print it to the console
println(error.localizedDescription)
}
var err: NSError?
var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
if(err != nil) {
// If there is an error parsing JSON, print it to the console
println("JSON Error \(err!.localizedDescription)")
} else {
let dataArray = jsonResult["dodats"] as [String]
for item in dataArray {
self.doDatItems.append(item)
}
// println(self.doDatItems)
}
})
task.resume()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
println(self.doDatItems)
cell.textLabel?.text = self.doDatItems[indexPath.row]
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}