2015-02-25 3 views
0

Когда мои UIDatePicker обновления, я называю этот метод:Ячейки не обновляется в источнике данных UITableView

func didUpdateDatePicker(datePicker: UIDatePicker) 
{ 
    birthdayDictionary.setObject(datePicker.date, forKey: EVENT_TYPE_BIRTHDAY_KEY_DATE_OF_BIRTH) 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     let indexPath = NSIndexPath(forRow: TableViewRows.Date, inSection: 0) 
     self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None) 
    }) 
} 

И мой DataSource использует этот код:

if indexPath.row == TableViewRows.Date 
{ 
    // Date description 
    // 
    let cell = tableView.dequeueReusableCellWithIdentifier(TableViewCellIdentifiers.Date, forIndexPath: indexPath) as UITableViewCell 

    cell.textLabel?.text = "Birthday" 
    cell.detailTextLabel?.text = " " 

    if let date = birthdayDictionary.objectForKey(EVENT_TYPE_BIRTHDAY_KEY_DATE_OF_BIRTH) as NSDate? 
    { 
     cell.detailTextLabel?.text = "\(formatter.stringFromDate(date))" 
    } 
} 

Breakpoints сказать мне, что код все выполняется, как ожидалось, и все переменные изменяются, как ожидалось, однако сам detailTextLabel не обновляется. Я вызываю метод reloadIndexPaths: в главной очереди, чтобы быть в безопасности, но он все равно не работает.

+0

Имеет ли значение detailTextLabel значение, не ноль? Вы установили IBOutlet для этой UILabel в своей ячейке? – Tim

+0

detailTextLabel - это нуль. Я использую правильную деталь uitableviewcell. Я должен указать, что начальное значение будет установлено, но после обновления моей модели и перезагрузки соответствующей строки - она ​​не отображает изменение –

+0

Если оно равно нулю, вы не можете установить для него текстовое значение. – Tim

ответ

0

Первое, что я сделал бы, это удалить dispatch_async, чтобы узнать, есть ли проблема с потоками. Я не понимаю, зачем вам это нужно, так как обратные вызовы источника данных для обновления таблицы должны быть асинхронными с вызывающим потоком.

+0

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

0

Увидели, что detailTextLabel - нет, вы не сможете установить текст. Таким образом, это означает, что возвращаемая ячейка не имеет этой метки. Скорее всего, вы не возвращаете ту же ячейку в код, который был создан в Storyboards, если вы используете прототипы UITableViewCell.

Убедитесь, что идентификатор, установленный в прототипе соты, соответствует идентификатору в вашем методе self.tableView registerClass:.

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