2015-04-24 4 views
-2

Я пытаюсь захватить значение textLabel.text ячейки в моем TableView и использовать nsuserdefaults, перенеся ее в другое представление. В этом окончательном представлении метка должна быть обновлена ​​с захваченным значением.Обновление текста меток на основе ячейки textLabel

Вот мой код из TableViewController.swift, который фиксирует значение:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    //actions that will proceed immediately a cell row is clicked 
    var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as? PFTableViewCell 

    //here I do the capture 

    let captureCellVals = NSUserDefaults.standardUserDefaults() 
    captureCellVals.setValue(cell?.textLabel?.text, forKey: "restoname") 

    //code that transitions to the final view 

    let view2 = self.storyboard?.instantiateViewControllerWithIdentifier("finalView") as IndividualViewController 

    self.navigationController?.pushViewController(view2, animated: true) 

} 

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

override func viewDidLoad() { 
    super.viewDidLoad() 

    let values = NSUserDefaults.standardUserDefaults() 

    let resname = values.valueForKey("restoname") 

    Restaurant.text = resname as? String 

    // Do any additional setup after loading the view, typically from a nib. 
} 


@IBOutlet var Restaurant: UILabel! 

Но по какой-то причине, когда я запускаю его в симуляторе, он падает. Нет отчета об ошибке или ничего. Просто крушение. Любая помощь будет оценена, спасибо!

ответ

0

Попробуйте использовать "??" ноль сливающихся оператор возвращать пустую строку в случае, если вы пытаетесь получить доступ к нему, прежде чем хранить любое значение к нему:

Restaurant.text = NSUserDefaults().stringForKey("restoname") ?? "" 

Примечание. NSUserDefaults имеет специальный метод для загрузки сохраненной строки под названием stringForKey()

+0

Так что я пробовал это, но все равно происходит то же самое. Однако, в левом нижнем углу Xcode это выглядит: само \t \t EatSafeDC.IndividualViewController 0x00007f96e2c80890 \t 0x00007f96e2c80890 значения \t \t NSUserDefaults 0x3ff0000000000000 \t 0x3ff0000000000000 ResName \t \t Строка «Я \ x89 \ xc3f \ x0foE \ x80AYf \ x0foM \ x90AXf \ x0foU \ xa0Yf \ x0fo] \ xb0Zf \ x0foe \ xc0^f \ x0fom \ xd0_f \ x0fou \ xe0Xf \ x0fo} \ xf0 \ xc9M9 \ xdbA \ xff \ xe3ffffff. \ x0f \ x1f \ x84 " –

+0

Попробуйте распечатать строку перед ее хранением –

+0

resname это уже String, нет необходимости бросать –

-1

Итак, я понял.

Оказалось, что проблема заключалась в переходе от таблицы к окончательному виду. Мне нужно было установить класс для view2 как FinalView вместо IndividualViewController. Спасибо, тем не менее.

+1

Это не как вы должны передавать данные с одного контроллера на другой. Прежде всего, вы не должны получать данные из ячейки - ячейки предназначены для отображения данных. Вы должны получить данные из своей модели на основе indexPath. Вы должны установить значение свойства в целевом контроллере со значением, которое вы получаете от модели в prepareForSegue. Для этой цели вам не следует использовать NSUserDefaults. – rdelmar

+0

Эй, спасибо за ответ! Я действительно рассматривал функцию prepareForSegue, но проблема в том, что мне нужны только данные для передачи, когда пользователь активирует строку. Как я буду делать то, что вы говорите? –

+0

Сделайте переход из ячейки на следующий контроллер. В файле prepareForSegue: отправитель: отправитель будет ячейкой, поэтому вы можете использовать метод табличного представления indexPathForCell: для получения indexPath. – rdelmar

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