部分错误Swift中的行数
Posted
技术标签:
【中文标题】部分错误Swift中的行数【英文标题】:Number of rows in section error Swift 【发布时间】:2015-08-27 10:01:45 【问题描述】:我有一个带有两个自定义单元 xib 的 tableview。
第一个xib只包含uilabel,第二个只包含uibutton。
单击 uibutton 后,将附加 someTagsArray
(我在 numberOfRows 函数中用于计数的数组)并应插入新行,但我却遇到了这个讨厌的错误
无效更新:第 0 节中的行数无效。 更新 (8) 后包含在现有节中的行必须是 等于该节之前包含的行数 update (4),加上或减去插入或删除的行数 该部分(0 插入,0 删除)和加或减的数量 移入或移出该部分的行(0 移入,0 移出)。
这是我的代码 (numberOfRowsInSection)
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) ->
Int
return someTagsArray.count + 1
cellForRowAtIndexPath
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
if(indexPath.row < someTagsArray.count)
var cell:TblCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! TblCell
cell.lblCarName.text = linesmain["start"]![indexPath.row]
return cell
else
var celle:vwAnswers = self.tableView.dequeueReusableCellWithIdentifier("cell2") as! vwAnswers
celle.Answer1.setTitle(answersmain["start"]![0], forState:UIControlState.Normal)
// answertitle is a global string variable
answertitle1 = "\(celle.Answer1.currentTitle!)"
return celle
最后是导致应用崩溃的函数代码
func insertData()
// appending the array to increase count
someTagsArray += linesmain[answertitle1]!
tableView.beginUpdates()
let insertedIndexPathRange = 0..<self.linesmain[answertitle2]!.count-4
var insertedIndexPaths = insertedIndexPathRange.map NSIndexPath(forRow: $0, inSection: 0)
tableView.insertRowsAtIndexPaths(insertedIndexPaths, withRowAnimation: .Fade)
tableView.endUpdates()
谢谢你们。
【问题讨论】:
您应该在将任何内容附加到 someTagsArray 之前编写 tableView.beginUpdates()。 @Nishant 它返回相同的错误,现在有更大的边距number of rows after the update (11) against original (4)
那么错误一定是在方法调用insertRowsAtIndexPaths。您的异常描述说:0 插入,0 删除。这意味着 insert 函数正在插入 0 行,而 someTagsArray.count 增加了。因此出现错误。
@Nishant 听起来很合理。但是如何正确插入行?
【参考方案1】:
试试这个代码来插入行:
func insertData()
let initialCount = someTagsArray.count as Int
let newObjects = linesmain[answertitle1] as! NSArray
// appending the array to increase count
//someTagsArray += newObjects
someTagsArray.addObjectsFromArray(newObjects)
self.tableView!.beginUpdates()
var insertedIndexPaths: NSMutableArray = []
for var i = 0; i < newObjects.count; ++i
insertedIndexPaths.addObject(NSIndexPath(forRow: initialCount+i, inSection: 0))
self.tableView?.insertRowsAtIndexPaths(insertedIndexPaths as [AnyObject], withRowAnimation: .Fade)
self.tableView!.endUpdates()
【讨论】:
返回以下错误The number of rows contained in an existing section after the update (12) must be equal to the number of rows contained in that section before the update (4), plus or minus the number of rows inserted or deleted from that section (4 inserted, 0 deleted)
刚刚检查了检查 - 不幸的是,binary operator += cannot be applied to NSArray type of objects
。
再次检查。 array doesn't have a member named addObjectsFromArrays
。它不是在 swift 1.2 中被弃用了吗?
您可以改用someTagsArray.addObjectsFromArray(newObjects)
。或者,您可以将 newObjects
的数据类型更改为 Array
,以便使用二元运算符 (+=)。
谢谢。将类型从 NSArray 更改为 simple Array 并且附加工作!但问题是 - 它加载在已加载的行内。我希望它在最后一行之后加载 - 在底部。以上是关于部分错误Swift中的行数的主要内容,如果未能解决你的问题,请参考以下文章
Swift Eureka forms:如何限制多值部分中的行数?