2016-06-12 2 views
0

У меня возникла проблема с отображением массива JSON в TableView - результат - это пустая таблица, которую я знаю, настроена правильно, поскольку она работает с фиксированным массивом данных. Я, похоже, правильно разбираю JSON, так как я могу манипулировать выходом печати в консоли, я думаю, что проблема - это функция перезагрузки таблицы, однако я попытался выполнить все варианты решения, которое я нашел в Интернете, и не может показаться заставить его работать. Действительное JSON выглядит следующим образом:Проблема с отображением данных JSON в Swift TableView

[{ 
"locationNumber": 10, 
"locationName": "Test Site", 
"locationPhoneNumber": "", 
"locationAddress": "test address" 
}, 
{ 
"locationNumber": 99, 
"locationName": "Test Site2", 
"locationPhoneNumber": "", 
"locationAddress": "second test address" 
}] 

The LocationTableViewController

import UIKit 
import Alamofire 
import AlamofireObjectMapper 

class LocationTableViewController: UITableViewController { 

var locations = [LocationResponse]() 

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

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// MARK: - Table view data source 
override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
      return 1} 

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cellIndentifier = "Cell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIndentifier, forIndexPath: indexPath) as! LocationTableViewCell 

    //configure the cell 
    cell.locationLabel.text = locations[indexPath.row].locationName 
    cell.locationidLabel.text = "$\(locations[indexPath.row].locationID)" 
    return cell 
} 

func getLocationResponse() { 
    let URL = "https://test.com.au/api/Store?uid=7654380A-D18F-46A1&username=app&password=apptest" 
    Alamofire.request(.GET, URL).responseArray { (response: Response<[LocationResponse], NSError>) in 
     let locationArray = response.result.value 
     if let locationArray = locationArray { 
      for location in locationArray { 
       print(location.locationID) 
       print(location.locationName) 
      } 
     } 
    } 
} 

В LocationResponse.swift

import Foundation 
import ObjectMapper 

class LocationResponse: Mappable { 
var locationName: String? 
var locationID: Int? 

required init?(_ map: Map){ 
} 

func mapping(map: Map) { 
    locationName <- map["locationName"] 
    locationID <- map["locationNumber"] 
} 
} 

Пользовательские Cell:

import UIKit 

class LocationTableViewCell: UITableViewCell { 

@IBOutlet var locationLabel: UILabel! 
@IBOutlet var locationidLabel: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
} 

} 

Я получаю это в консоли с функцией печати, которая выглядит правильно, и я предполагаю, что означает, что массив был создан правильно:

Optional(10) 
Optional("Test Site") 
Optional(99) 
Optional("Test Site2") 

Пожалуйста, помогите, если вы не можете

ответ

1

Вы никогда не присвоит результат от сервера переменная var locations = [LocationResponse](), и она всегда пуста.

if let locationArray = locationArray { 
    self.locations = locationArray 
    self.tableView.reloadData() 
} 
+0

исправлено! Спасибо большое! – Hound

+0

уже принята, еще раз спасибо – Hound

+0

(И вы должны вернуться, как только у вас будет достаточно ответа на голосование и голос для голосования. Вам не обязательно, но это свидетельствует о благодарности.) –

Смежные вопросы