Swift 3 部分中的行数无效

Posted

技术标签:

【中文标题】Swift 3 部分中的行数无效【英文标题】:Invalid number of rows in section Swift 3 【发布时间】:2017-03-29 15:54:14 【问题描述】:

我有一个包含类 Card() 的数组字典,我有一个按钮来调用移动一个数组的函数

    static var DeliveryStatusArray =
    [
        "claimable": [Card](),
        "onTime": [Card](),
        "future": [Card](),
        "claimDone": [Card](),
        "tooOld": [Card](),
    ]

我的移动卡的功能是

    static func moveCard(card:Card) -> Void 
    var pos:Int = -1
    var index:Int = 0
    while(index < (DashboardManager.DeliveryStatusArray["claimable"]?.count)!)
    
        if (DashboardManager.DeliveryStatusArray["claimable"]?[index].idCard == card.idCard)
        
            pos = index
        
        index += 1
    
    if (pos > -1)
    
        let card:Card = (DashboardManager.DeliveryStatusArray["claimable"]?[pos])!
        DashboardManager.DeliveryStatusArray["claimable"]?.remove(at: pos)
        DashboardManager.DeliveryStatusArray["claimDone"]?.append(card)
    

完成后,我会在视图中发布通知以调用此函数

    func notificationFinish(notification:Notification) -> Void
        let sectionClaimable:Int = (api.dictionary["delivery"]?.index(of: "claimable"))! // Is 1
        let sectionClaiDone: Int = (api.dictionary["delivery"]?.index(of: "claimDone"))! // Is 4
        tableView.reloadSections(IndexSet(integer: sectionClaimable), with: .top)
        tableView.reloadSections(IndexSet(integer: sectionClaimDone), with: .top)
        return
    

第一个循环我在 * DeliveryStatusArray["claimDone]* 中得到了 2 张卡,在调用 moveCard() 之后我得到了 3 张卡

我收到了错误

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 4 节中的行数无效。更新 (3) 后现有节中包含的行数必须等于更新前该节中包含的行数 (2),加上或减去从该节插入或删除的行数(0 插入,0 删除),加上或减去移入或移出该节的行数( 0 搬进来,0 搬出去)。'

我在重新加载数据时无法获取更多项目?

【问题讨论】:

重要提示...以小写字母开头您的属性名称,例如deliveryStatusArray区分类 感谢您的提示! 你能解释一下moveCard应该做什么吗? 将一张卡片从一个数组移动到另一个,示例函数从 DashboardManager.DeliveryStatusArray["claimable"] 复制一张卡片放入 tmp var,从“claimable”中删除卡片并将卡片添加到“声明完成” 【参考方案1】:

如果我理解正确,你的代码比它需要的要复杂得多……

// Get the index of card in claimable with matching idCard
guard let index = deliveryStatusArray["claimable"]?.index(where: $0.idCard == card.idCard ) else  return 

// Remove the card at that index
let card = deliveryStatusArray["claimable"]?.remove(at: index)

// Append the card
deliveryStatusArray["claimDone"]?.append(card)

【讨论】:

以上是关于Swift 3 部分中的行数无效的主要内容,如果未能解决你的问题,请参考以下文章

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

无效更新:iOS 中第 0 部分的行数无效

无效更新:第 0 节中的无效行数。更新后现有节中包含的行数 (3)

跨部分重新排序行时更新无效

尝试使用 reloadsections 重新加载时,节中的行数无效

NSInternalInconsistencyException 原因:'无效更新:第 0 节中的行数无效'