第二个tableview的cellForRowAtIndexPath似乎正在打断第一个

时间:2016-11-02 12:40:50

标签: swift uitableview

我有一个包含2个表视图的表视图控制器。我已经通过了调试器,我感到很困惑。我认为cellForRowAtIndexPath中的大多数代码都是无关紧要的,但为了以防万一而包含在内。行数始终读为9,但大多数时候,尽管不是全部,但根据调试器和print语句,cellForRowAtIndexPath中条件的else部分只运行了7次。奇怪的是,所有9个单元确实出来了,但最后一个单元格的内容将是唯一错误的信息。错误的信息只会在其字段按钮和字段内容中出错;它总是假定字段内容是nil并且有一个字段按钮,其标签与第0行一致,但其fieldName将是正确的。

这是一个非常奇怪的错误,让我彻夜难眠,如果我能从兽医中醒来,它将真正让我的一天。谢谢!

func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    if tableView == POCTableView{
        return 3
    } else{
        let ret = propertyDisplayGroups.count
        print("number of rows is \(ret)")
        return ret
    }
}

@IBOutlet weak var POCTableView: UITableView!
@IBOutlet weak var friendFieldsTableView: UITableView!

var testCount = 0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if tableView == POCTableView{
        let cell = tableView.dequeueReusableCell(withIdentifier: "POCTableViewCell", for: indexPath) as! POCTableViewCell
        cell.dateDisplay.text = "12/20/15"
        cell.backgroundColor = indexPath.row % 2 == 0 ? UIColor.white : GREY_COLOR
        return cell
    } else{
        let cell = tableView.dequeueReusableCell(withIdentifier: "FriendFieldCell", for: indexPath) as! FriendFieldTableViewCell
        let propertyDisplayGroup = propertyDisplayGroups[indexPath.row]
        cell.fieldName.text = propertyDisplayGroup.fieldText
        let friendFields = friend!.fieldsDictionary
        if let fieldContent = friendFields[propertyDisplayGroup.propertyName] as? String{
            cell.fieldContent.text = fieldContent
        } else {
            cell.addFieldButton.setTitle(propertyDisplayGroup.buttonText, for: .normal)
            cell.addFieldButton.isEnabled = true
            cell.addFieldButton.isHidden = false
            cell.fieldContent.isHidden = true
        }
        testCount += 1
        print("testCount \(testCount)")
        return cell
    }
}

p.s:在遍历调试器时,第二个表将开始在此tableview的第7行之后加载其行。第8行永远不会出现任何问题,尽管它没有出现在调试器中!

1 个答案:

答案 0 :(得分:0)

更改

if tableView == POCTableView{ ... }

if tableView === POCTableView{ ... }

===是swift中的一个运算符,用于确定两个对象是否具有相同的引用。

除非tableView实施POCTableView协议,否则您的条件是检查false的值UITableView的值,Comparable的值始终为if let fieldContent = friendFields[propertyDisplayGroup.propertyName] as? String{ ... } 。我认为它没有。

如果这不是您的问题

我会调查

friendFields

您可能正在尝试访问fieldContent中不存在的密钥else将失败,MethodType阻止运行会为这些神秘的数据提供错误的数据出现的空白单元格。这听起来似乎是你问题的合理原因。