【问题标题】:Invalid update: invalid number of rows in section 0 error occur无效更新:第 0 节中出现无效行数错误
【发布时间】:2022-01-12 04:21:01
【问题描述】:

这是我的结构

struct CommunityListRM: Codable {
    let status       : Bool?
    let communityList: [CommunityList]?
    
    struct CommunityList: Codable {
        var id              : String?
        var user_id         : String?
        var icon            : String?
        var nickname        : String?
        var profile_image   : String?
        var content         : String?
        var image_1_url     : String?
        var image_2_url     : String?
        var image_3_url     : String?
        var image_4_url     : String?
        var image_5_url     : String?
        var image_ratio1    : String?
        var image_ratio2    : String?
        var image_ratio3    : String?
        var image_ratio4    : String?
        var image_ratio5    : String?
        var comment_qty     : String?
        var like_qty        : String?
        var date            : String?
        var created_at      : String?
        var updated_at      : String?
        var like_it         : String?
    }
}

我想像 instagram 提要一样插入行

var posts        : [CommunityListRM.CommunityList] = []

NetworkService().request(.communityList, params, header) { [self] (response: DataResponse<CommunityListRM,AFError>) in
    switch response.result {
        case .success(let data):
        if let nComList = data.communityList {

           self.posts.append(contentsOf: nComList)
           print("selfpostcount\(self.posts.count)")
           self.tableview.beginUpdates()
           self.tableview.insertRows(at: [IndexPath(row: self.posts.count - 1, section: 0)], with: .none)
           self.tableview.endUpdates()
       }
    }
}

如果我尝试此代码错误发生

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后现有节中包含的行数(10)必须等于行数更新前包含在该节中的行数 (0),加上或减去从该节插入或删除的行数(1 插入,0 删除),加上或减去移入或移出该节的行数(0 移入, 0 移出)。表格视图:;层 = ;内容偏移:{0, 0};内容大小:{414, 0};调整后的ContentInset:{0、0、0、0};

请帮帮我

【问题讨论】:

    标签: arrays swift xcode


    【解决方案1】:

    首先begin-/endUpdates() 对单个插入/删除/移动操作毫无意义。


    发生错误是因为您向数组中添加了多个项目,但只插入了一行。您必须指定所有索引路径。

    • 如果 posts 为空 map 的所有索引 posts 到索引路径

      self.posts.append(contentsOf: nComList)
      let indexPaths = self.posts.indices.map{IndexPath(row: $0, section: 0)}
      self.tableview.insertRows(at: indexPaths, with: .automatic)
      

      或者——因为你没有指定任何动画——只是重新加载表格视图

      self.posts.append(contentsOf: nComList)
      self.tableview.reloadData()
      
    • 如果posts 不为空,则在追加项目之前和之后计算数组中的项目以获取开始和结束索引

      let startIndex = self.posts.count
      self.posts.append(contentsOf: newArray)
      let endIndex = self.posts.count
      let indexPaths = (startIndex..<endIndex).map{IndexPath(row: $0, section: 0)}
      self.tableview.insertRows(at: indexPaths, with: .automatic)
      

    【讨论】:

    • 非常感谢!!你的帖子很有帮助。我试过了,它有效!
    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2016-10-31
    相关资源
    最近更新 更多