2016-10-14 1 views
-1

У меня возникли проблемы с загрузкой данных в таблицу. Данные, похоже, не загружаются должным образом. Я только начинаю программировать IOS и некоторое время задерживался на этой проблеме.Почему я получаю пустой Tableview с этим кодом? JSON

Here is a screenshot of my storyboard

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

var afspraken = [Afspraak]() 

func loadJsonData() 
{ 
    let url = URL(string: "https://i342444.venus.fhict.nl/") 
    let dataTask = URLSession.shared.dataTask(with: url!) 
    { 
     (data, response, error) 
     in 
     if error != nil 
     { 
      print (error) 
     } 
     else 
     { 
      do 
      { 
       let jsonObject = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) 
       self.parseJsonData(jsonObject as! Array<AnyObject>) 
       print(data) 
      } 
      catch let error as NSError {print("Error parsing JSON: \(error)")} 
     } 
    } 

    dataTask.resume() 
} 

func parseJsonData(_ jsonObject: Array<AnyObject>) { 
    for item in jsonObject 
    { 
     let afspraak = 
      Afspraak(naam: item["naam"] as! String 
       , adres: item["adres"] as! String 
       , postcode: item["postcode"] as! String 
       , woonplaats: item["woonplaats"] as! String 
       , telefoonnummer: item["telefoonnummer"] as! String 
       , email: item["email"] as! String 
       , datum: item["datum"] as! Date 
       , tijdstip: item["tijdstip"] as! String 
       , omschrijving: item["omschrijving"] as! String) 


     afspraken.append(afspraak) 
    } 
    self.tableView.reloadData() 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return afspraken.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let Cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
    let currentRow = indexPath.row 
    let currentAfspraak = self.afspraken[currentRow] 
    Cell.textLabel?.text = currentAfspraak.naam 
    return Cell 
} 

ответ

0

URLDataTask Запрос выполняется в фоновом потоке (не UI потока). Поэтому вам необходимо обновить интерфейс пользователя по основному потоку с помощью GCD-Grand Central Dispatch после завершения.

DispatchQueue.main.sync { 
    self.tableView.reloadData() 
} 

Редактировать

Я посмотрел в вашу JSON URL, это не JSON-файл, это HTML-файл. Вот почему JSONSerialization возвращается недействительным. Вам нужно поместить файл .json на ваш сервер вместо того, чтобы вставлять строку json в файл HTML.

файл на сервере, как это: as you can see this is an HTML.

как вы можете видеть это HTML.

Правильный файл JSON должен быть таким: enter image description here

Пожалуйста, обратите внимание на разницу между двумя URL-адресов на верхней части изображения, правильный один имеет .json, и у вас просто /, который является каталог.

Поэтому то, что вам нужно сделать, это загрузить файл JSON на сервер, и использовать соответствующий URL-адрес, как https://i342444.venus.fhict.nl/coolName.json

+0

Правда, это было что-то я все еще нужно добавить. Но проблема заключается в загрузке данных JSON. Мой массив остается пустым во время запуска кода, поэтому что-то происходит не так, как я хочу. –

+0

@DennisvdEijnde Пожалуйста, см. Мой отредактированный ответ, есть проблема с вашим URL. –