2016-03-14 3 views
0

Я пытаюсь перезагрузить данные в моем представлении таблицы после получения данных из метода делегата. Но проблема в том, что все данные не поступают в функцию tableView cellForRowAtIndexPath. Я установил переменную self.restNames для хранения значений из метода делегата, который имеет около 4 значений, но не все из них отображаются в функции cellForRowAtIndexPath. Когда я меняю вкладки и возвращаюсь к таблицеView, некоторые данные поступают, но не все. Спасибо за помощь. Извиняюсь, если я что-то пропустил, я новичок в Swift и не задал много вопросов в StackOverflow.UITableView cellForRowAtIndexPath функция не обновляется после перезагрузки функции

С уважением, Саурабх

Ниже мой код tableViewController

class RestTableViewController: UITableViewController,getDistanceTime { 

var RestTable = [Restaurant]() 
let label = UILabel() 
let menuUrl = "menu url" 
let listProjectUrl = "url" 
override func viewDidLoad() { 
    super.viewDidLoad() 

    let headerView = self.tableView 
    headerView.tableHeaderView?.frame = CGRectMake(0, 30, self.view.frame.width, 40) 
    headerView.tableHeaderView?.backgroundColor = UIColor.redColor() 


    self.tableView.tableHeaderView = self.tableView.tableHeaderView 
    self.tableView.tableHeaderView?.frame = CGRectMake(0, 30, self.view.frame.width, 40) 

    let token = keychain[""] 

    let menuData = Alamofire.request(Method.GET, self.menuUrl, headers: ["Authorization":"JWT \(token!)"]) 
    menuData.responseJSON{ response in 
     let data = JSON(response.result.value!) 
     var localmenu = [menu]() 
     for (_,item) in data{ 
      let menuOne = menu(place: item["place"].string!, types: item["types"].string!, name: item["name"].string!, price: item["price"].string!) 
      localmenu.append(menuOne) 
     } 
     self.menus = localmenu 
    } 

} 


// Delegate method 
func loadWithDisTime(distance: String,name: String) 
{ 
    dispatch_async(dispatch_get_main_queue()) 
     {() -> Void in 
      self.userDistanceFromLocation = distance 
      //This will hold 4 values 
      self.restNames = name 

      self.tableView.reloadData() 
    } 

} 

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(true) 
    self.getDistance = getDistanceTimeVC() 
    self.getDistance.delegate = self 

    let restCount = self.RestTable.count 
    if restCount == 0 
    { 
     let alertView = UIAlertController(title: "There are no restaurants near your location", message: "Press Okay to go back", preferredStyle: UIAlertControllerStyle.Alert) 
     let alertAction = UIAlertAction(title: "Okay", style: UIAlertActionStyle.Cancel, handler: nil) 
     alertView.addAction(alertAction) 
     self.presentViewController(alertView, animated: true, completion: nil) 

    } 
    else 
    { 
     for item in 0...restCount - 1 
     { 
      self.restLat = self.RestTable[item].lat 
      self.restLng = self.RestTable[item].lng 
      self.getDistance.getDistance(self.userLat, userLng: self.userLng, restLat: self.restLat, restLng: self.restLng,restName: self.RestTable[item].name) 
     } 
    } 
} 


override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

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

} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! RestTableViewCell 
    //Not all values coming through here 
    print(self.restNames) 
    if self.RestTable[indexPath.row].name == self.restNames 
    { 
     cell.textLabel?.text = "\(indexPath.row + 1) - \(self.RestTable[indexPath.row].name) - \(self.userDistanceFromLocation)" 
     cell.backgroundColor = UIColor.whiteColor() 
     cell.textLabel?.textColor = UIColor.blackColor() 
     cell.textLabel?.font = UIFont(name: "Avenir-Heavy", size: 15) 
    } 


    return cell 
} 
+0

внедривших вы протокол источника данных? – Harshavardhan

+0

@ Harshavardhan, getDistanceTime - протокол. И делегат был настроен на переменную «getDistance». Это то, о чем вы просили? –

+0

Я говорю о табличных представлениях, свойствах datasource и его протоколе. – Harshavardhan

ответ

1

В этом блоке оставить только перезарядить вид таблицы

dispatch_async(dispatch_get_main_queue()) 
     {() -> Void in 

      self.tableView.reloadData() 
    } 
+0

Спасибо за ответ. Но я все еще получаю ту же проблему. –

+0

вы должны обновить свой источник данных (независимо от массива), а затем перезагрузить tableview в основном потоке. ничего особенного – Anton

+0

как это сделать? Я получаю данные в переменной «self.restNames» из метода делегата и передавая их в «cellForRowAtIndexPath». –

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

  • Нет связанных вопросов^_^