2015-05-06 1 views
0

Я провел годы, пытаясь решить эту проблему, но без разрешения.Почему моя переменная изменяется в printLn, но не в табличном представлении Swift

Я, наконец, добрался до точки, где я извлекаю данные из одного контроллера и перемещаю его к контроллеру назначения, когда я разматываю segue, однако, когда переменная только перезагружается в println, но не в виде таблицы ,

Я попытаюсь объяснить это немного лучше с моим кодом, поскольку это звучит сложно.

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

Я поставил label.text в переменном в верхней части исходного контроллера, как так var selectedStation = "Search Stations"

здесь моя дрянная названа функция, которая используется для println переменных, увидеть, если он работает, который он делает:

func updateStuff() { 
    println("you selected \(selectedStation)") 
    tableView.reloadData() 
} 

и я объявляю текст метки в моем cellForRowAtIndexPath так:

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

     let cell = tableView.dequeueReusableCellWithIdentifier("searchFieldCell", forIndexPath: indexPath) as! searchFieldTableViewCell 
     cell.backgroundView = UIImageView(image: UIImage(named: "red-full")) 
     cell.destinationLabel.text = selectedStation 
} 

то в моем UISearchController я следующее передать эту переменную назад

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{ 
    println(stationArray[indexPath.row]) 
    selectedStation = stationArray[indexPath.row] 
    self.performSegueWithIdentifier("unwindToSet", sender: self) 

} 

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.destinationViewController .isKindOfClass(SetAlertController) { 
     var VC = segue.destinationViewController as! SetAlertController 
     VC.selectedStation = self.selectedStation 
     VC.updateStuff() 
    } 
} 

по существу мой контроллер получает обновленную переменную, но не обновляет его в Tableview, это только обновляет его в Println.

+0

Вы можете поместить код на Google Drive и дать нам возможность посмотреть? –

ответ

0

я создал быстрый демонстрационный проект со следующим viewcontrollers:

class MainViewController: UIViewController { 

    @IBOutlet weak var label: UILabel! 

    @IBAction func unwind(segue: UIStoryboardSegue) { 
     println("unwinding") 

     if let sourceViewController = segue.sourceViewController as? ModalViewController { 
      label.text = sourceViewController.selectedText 
     } 
    } 
} 

выстукивая по результатам этикетки в modalviewcontroller, чтобы показать. Я установил это в раскадровке.

class ModalViewController: UITableViewController { 
    var selectedText: String? 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = tableView.cellForRowAtIndexPath(indexPath)! 
     selectedText = cell.textLabel?.text 
     performSegueWithIdentifier("unwindToSet", sender: self) 
    } 
} 

все работает должным образом! не стесняйтесь спрашивать, что-то неясно ... вы можете найти демо-проект здесь: https://www.dropbox.com/sh/u2blzmo3ztaaini/AADq8hOMMS71wvBH1eH4Bz_4a?dl=0

+0

Спасибо :) Все работает правильно – Addzy