Использование ObjectMapper - как быстро преобразовать JSON в TableView

У меня проблема с передачей результата JSON в массив, который я использую для отображения в TableView.

вот моя модель:

class Restaurant: Mappable {

var lat: Float?
var lng: Float?
var address: String?
var name: String?

required init?(_ map: Map) { }

// Mappable
func mapping(map: Map) {
    lat     <- map["venue.location.lat"]
    lng     <- map["venue.location.lng"]
    address <- map["venue.location.address"]
    name    <- map["venue.name"]
}
}

а вот мой ViewController

class ListViewController: UIViewController {

@IBOutlet weak var tableView: UITableView!

var listRestaurants: [Restaurant] = []

override func viewDidLoad() {
super.viewDidLoad()
retrieveFoursquareList()
tableView.reloadData()
}

func retrieveFoursquareList(){
let foursquareService = FoursquareService()

foursquareService.getFoursquare {
  (let response) in

  if let currrently = response {
    dispatch_async(dispatch_get_main_queue()) {
      print("RESULTADO 2 array: \(currrently)")

      for restaurant in currrently {
        if let name = restaurant.name {
          restaurant.name = name
          print("RESULTADO 3 row: \(restaurant.name)")
          self.listRestaurants.append(restaurant)
          print("RESULTADO 4 array: \(self.listRestaurants)")

        }

      } 
    }
  }
} 
}
}

extension ListViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) ->    Int {
return listRestaurants.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("RestautantsCell", forIndexPath: indexPath) as! RestaurantCell


let listRestaurant = listRestaurants[indexPath.row]

cell.nameLabel.text = listRestaurant.name
cell.addressLabel.text = listRestaurant.address
return cell
}

}

На изображении вы можете видеть, что мой результат JSON в порядке. Моя проблема заключается в том, как передать этот результат в массив de var listRestaurant:

Вывод JSON в порядке, но у меня проблемы с передачей этого JSON в массив var listRestaurant

Я буду признателен за вашу помощь. Спасибо.


person Tindaya    schedule 29.05.2016    source источник


Ответы (1)


Не похоже, что вы устанавливаете делегата tableview,

в свой viewDidLoad добавьте следующий код:

tableView.dataSource = self
tableView.delegate = self

Этот код:

for restaurant in currrently {
    if let name = restaurant.name {
      restaurant.name = name

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

if let _ = restaurant.name {
    self.listRestaurants.append(restaurant)
}

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

let restaurant = Mapper<Restaurant>().map(restaurantData)

Я не уверен, что вы можете просто использовать его так, как вы, но я не уверен.

Основная причина, по которой ваш tableView не отображается, заключается в том, что функции делегата не установлены.

person Scriptable    schedule 29.05.2016
comment
Спасибо делегатам. Я починил это. Но у меня все еще проблема с передачей данных. Я использовал let restaurant = Mapper‹Restaurant›().map(restaurantData), что не работает. - person Tindaya; 29.05.2016