我试图删除不符合for循环条件的行。但是,我得到的错误是:'尝试删除第1部分中的第0行,但在更新之前只有1个部分。"我之前从未见过这个,也不确定我为什么会这样做。
我的代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = theTableView.dequeueReusableCellWithIdentifier("MyCell") as! TableViewCell
cell.titleLabel.text = titles[indexPath.row]
cell.priceLabel.text = prices[indexPath.row]
cell.descLabel.text = descs[indexPath.row]
cell.itemImage.image = itemImages[indexPath.row]
cell.userNumber = phoneNumbers[indexPath.row] as! String
cell.timeLabel.text = datesHours[indexPath.row]! + "hr"
cell.distanceLabel.text = String(locations[indexPath.row]!) + "mi"
cell.viewController = self
self.theTableView.beginUpdates()
for (index, number) in self.locations {
if number <= 5 {
let indexPath = NSIndexPath(forRow: number, inSection: 1)
self.theTableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
self.theTableView.endUpdates()
答案 0 :(得分:4)
好像你告诉桌子会有更多的行而不是你想要显示的行,然后在事后删除它们。
相反,你应该检查数组中的元素是否符合numberOfRowsInSection
中(或之前)的标准,并将它们放入一个实际显示的不同数组中,以便表知道实际有多少行显示。然后在cellForRowAtIndexPath
中,只使用具有实际显示数据的新创建数组。
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Return the number of rows in the section.
self.displayArray = []
for (index, number) in self.locations {
if number <= 5 {
self.displayArray.Add(self.locations[index])
}
}
return self.displayArray.Count
}
我假设您的错误与您尝试在首次尝试创建表的方法中更新表有关。您正在尝试更新尚未完全创建的内容。