2017-10-06 112 views
1

我使用tableView創建了一個UIViewController類,以顯示單元格中的不同位置,我正在使用Alamofire和Google API(地圖,地點),唯一的問題是當我運行該項目的細胞是空的,這是我的控制器類:TableView不顯示單元格中的內容(Swift)

import UIKit 

class SelectClass: UIViewController, UITableViewDelegate, UITableViewDataSource { 


    @IBOutlet weak var tableView: UITableView! 

    var list : [QCategoryy] = [QCategoryy]() 




    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.delegate = self 
     self.title = "Categories" 
     list = NearbyPlaces.getCategories() 
    } 



    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 


     list.sort() { $0.views > $1.views} 
     tableView.reloadData() 
    } 


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




    @IBAction func backTapp(_ sender: Any) { 

     dismiss(animated: true, completion: nil) 

    } 


    @IBAction func doneTapp(_ sender: Any) { 



} 




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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let identifier = "CATEGORY_CELL" 
     let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) 
     cell.textLabel?.text = list[indexPath.row].name 
     return cell 
    } 

    let nearbySearchSegueIdentifier = "goToMcourse" 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     self.performSegue(withIdentifier: nearbySearchSegueIdentifier, sender: list[indexPath.row]) 
    } 














    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if segue.identifier == nearbySearchSegueIdentifier { 
      guard let category = sender as? QCategoryy else { 
       return 
      } 
      if let vc = segue.destination as? CourseClass2 { 
       vc.category = category 
      } 
     } 
    } 
} 









extension QCategoryy { 
    private static let ketPrefix = "category-" 

    var views:Int { 
     get { 
      return UserDefaults.standard.integer(forKey: QCategoryy.ketPrefix + name) 
     } 
    } 

    func markView() { 
     UserDefaults.standard.set(views + 1, forKey: QCategoryy.ketPrefix + name) 
    } 
} 

,這些都是與它的工作兩類:

import Foundation 
import UIKit 
import CoreLocation 
import Alamofire 

class NearbyPlaces { 
    static func getCategories() -> [QCategoryy] { 
     let list:[QCategoryy] = ["Bakery", "Doctor", "School", "Taxi_stand", "Hair_care", "Restaurant", "Pharmacy", "Atm", "Gym", "Store", "Spa"] 
     return list 
    } 

    static let searchApiHost = "https://maps.googleapis.com/maps/api/place/nearbysearch/json" 
    static let googlePhotosHost = "https://maps.googleapis.com/maps/api/place/photo" 

    static func getNearbyPlaces(by category:String, coordinates:CLLocationCoordinate2D, radius:Int, token: String?, completion: @escaping (QNearbyPlacesResponse?, Error?) -> Void) { 

     var params : [String : Any] 

     if let t = token { 
      params = [ 
       "key" : AppDelegate.googlePlacesAPIKey, 
       "pagetoken" : t, 
      ] 
     } else { 
      params = [ 
       "key" : AppDelegate.googlePlacesAPIKey, 
       "radius" : radius, 
       "location" : "\(coordinates.latitude),\(coordinates.longitude)", 
       "type" : category.lowercased() 
      ] 
     } 

     Alamofire.request(searchApiHost, parameters: params, encoding: URLEncoding(destination: .queryString)).responseJSON { response in 

      if let error = response.error { 
       completion(nil, error) 
      } 
      if let response = QNearbyPlacesResponse(dic : response.result.value as? [String : Any]) { 
       completion(response, nil) 
      } 
      else { 
       completion(nil, QNearbyPlacesResponseError.noParsingDone) 
      } 
     } 
    } 

    static func googlePhotoURL(photoReference:String, maxWidth:Int) -> URL? { 
     return URL.init(string: "\(googlePhotosHost)?maxwidth=\(maxWidth)&key=\(AppDelegate.googlePlacesAPIKey)&photoreference=\(photoReference)") 
    } 
} 

enum QNearbyPlacesResponseError : Error { 
    case noParsingDone 
} 


struct QNearbyPlacesResponse { 
    var nextPageToken: String? 
    var status: String = "NOK" 
    var places: [QPlace]? 

    init?(dic:[String : Any]?) { 
     nextPageToken = dic?["next_page_token"] as? String 

     if let status = dic?["status"] as? String { 
      self.status = status 
     } 

     if let results = dic?["results"] as? [[String : Any]]{ 
      var places = [QPlace]() 
      for place in results { 
       places.append(QPlace.init(placeInfo: place)) 
      } 
      self.places = places 
     } 
    } 

    func canLoadMore() -> Bool { 
     if status == "OK" && nextPageToken != nil && nextPageToken?.characters.count ?? 0 > 0 { 
      return true 
     } 
     return false 
    } 



} 

struct QCategoryy { 
    var name:String 
    init(name:String) { 
     self.name = name 
    } 
} 

extension QCategoryy: ExpressibleByStringLiteral { 
    init(stringLiteral value: String) { 
     self.name = value 
    } 
    init(unicodeScalarLiteral value: String) { 
     self.init(name: value) 
    } 
    init(extendedGraphemeClusterLiteral value: String) { 
     self.init(name: value) 
    } 
} 

在我看來,它的所有權利,我不明白爲什麼當我進入我的UIViewController了的tableView具有所有空單元格,在這裏也有什麼,我看到正在運行的項目enter image description here

當屏幕希望有人能找到問題

+0

你應該寫'tableView.delegate = self'在'viewDidLoad中()'方法 – ItsMeMihir

+0

@ItsMeMihir做到了,但仍然沒有工作:( – seran

+0

檢查你有清單或不 – ItsMeMihir

回答

1

與嘗試:

tableView.dataSource = self

0

嘗試增加:

tableView.dataSource = self 
tableView.delegate = self` 

viewDidLoad()

相關問題