无效更新:第 0 节中出现无效行数错误
Posted
技术标签:
【中文标题】无效更新:第 0 节中出现无效行数错误【英文标题】:Invalid update: invalid number of rows in section 0 error occur 【发布时间】: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 移出)。表格视图:
请帮帮我
【问题讨论】:
【参考方案1】:首先begin-/endUpdates()
对单个插入/删除/移动操作毫无意义。
发生错误是因为您向数组中添加了多个项目,但只插入了一行。您必须指定所有索引路径。
如果 posts
为空 map
的所有索引 posts
到索引路径
self.posts.append(contentsOf: nComList)
let indexPaths = self.posts.indices.mapIndexPath(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).mapIndexPath(row: $0, section: 0)
self.tableview.insertRows(at: indexPaths, with: .automatic)
【讨论】:
非常感谢!!你的帖子很有帮助。我试过了,它有效!以上是关于无效更新:第 0 节中出现无效行数错误的主要内容,如果未能解决你的问题,请参考以下文章
无效更新:第 0 节中的无效行数。更新后现有节中包含的行数 (3)
无效更新:第 0 节中的无效行数以 NSException 类型的未捕获异常终止
NSInternalInconsistencyException 原因:'无效更新:第 0 节中的行数无效'