Cell的标签不会在UITableView数据源中更新

时间:2015-02-25 13:22:50

标签: ios uitableview swift

当我的UIDatePicker更新时,我称之为此方法:

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))"
    }
}

断点告诉我代码全部按预期运行,并且所有变量都按预期更改,但是detailTextLabel本身不会更新。我在主队列上调用reloadIndexPaths:方法是安全的,但它仍然不起作用。

2 个答案:

答案 0 :(得分:0)

我要做的第一件事就是移除dispatch_async以查看它是否是线程问题。我不知道你为什么还需要它,因为表更新数据源回调应该与调用线程异步。

答案 1 :(得分:0)

看作detailTextLabel为零,您将无法设置文本。所以这意味着返回的单元格没有该标签。您可能无法在代码中返回与在Storyboards中创建的相同的单元格 - 假设您使用的是UITableViewCell原型。

确保您的单元格原型上设置的标识符与self.tableView registerClass:方法中的标识符匹配。