部分错误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:如何限制多值部分中的行数?

作业-- 统计文本文件中的字符数单词数行数

Node.js:计算文件中的行数

使用Swift 3和CoreData删除表视图行

错误:iPhone SDK 中 UITableView 部分中的行数

如何根据swift中的行数调整UICollectionView contentSize.height