我有一个包含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行永远不会出现任何问题,尽管它没有出现在调试器中!
答案 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
阻止运行会为这些神秘的数据提供错误的数据出现的空白单元格。这听起来似乎是你问题的合理原因。