0

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 の結果が OK であることがわかります。私の問題は、この結果を de var listRestaurant 配列に渡す方法です。

JSON 出力は問題ありませんが、この JSON を var listRestaurant 配列に渡すのに問題があります

私はあなたの助けに感謝します。ありがとう。

4

1 に答える 1

0

テーブルビューデリゲートを設定しているようには見えませんが、

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 が表示されない主な理由は、デリゲート関数が設定されていないためです。

于 2016-05-29T16:25:42.597 に答える