ios - 在 TableView 中插入行

标签 ios iphone swift uitableview

我通过 JSON 获取数据,当我滚动屏幕时,我向服务器发出请求,有时数据可能会结束,然后应用程序在 insertRows 上崩溃,我该如何修复它?

这是我的代码:

 override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if (!isMoreDataLoading) {

        let down = "https://--.com/local/apps/apple/events.php/?nPageSize=\(nPageSize)&iNumPage=\(iNumPage)"
        let scrollViewContentHeight = tableView.contentSize.height
        let scrollOffsetThreshold = scrollViewContentHeight - tableView.bounds.size.height
        if(scrollView.contentOffset.y > scrollOffsetThreshold && tableView.isDragging) {
            isMoreDataLoading = true
            requestD(url: down) 
        }
    }
}
func requestD(url:String){

    var urlRequest = URLRequest(url: URL(string: url)!)
    urlRequest.timeoutInterval = 300
    let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in

        if error != nil{
            print(error ?? 0)
            return
        }
        do{
            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]
            if let newsJson = json["EVENTS"] as? [[String : AnyObject]] {

                for newJson in newsJson{
                    let info = Modal()

                    info.id = newJson["ID"] as? String
                    info.name = newJson["NAME"] as? String

                    if newJson["PICTURE"] as? String != nil {
                        info.ImageViewURL = newJson["PICTURE"] as! String
                    }
                    if newJson["PICTURE_DETAIL"] as? String != nil {
                        info.ImageViewURLDetail = newJson["PICTURE_DETAIL"] as! String
                    }
                    info.stmp = newJson["STMP"] as? Int
                    info.text = newJson["DETAIL_TEXT"] as? String


                    info.name = info.name?.replacingOccurrences(of: "&[^;]+;", with: "", options: String.CompareOptions.regularExpression, range: nil)
                    info.text = info.text?.replacingOccurrences(of: "&[^;]+;", with: "", options: String.CompareOptions.regularExpression, range: nil)


                    if self.isRefresh == true {
                        self.modals.insert(info, at: 0)
                    } else {
                        self.modals.append(info)
                    }



                }
            }

        } catch let error {
            print(error)
        }

        DispatchQueue.main.sync {

            self.iNumPage += 1
            self.isMoreDataLoading = false


            self.Preload.preloadEnd(tableView: self.tableView)

           // self.tableView.reloadData()


            self.tableView.beginUpdates()
            self.tableView.insertRows(at: [IndexPath(row: self.modals.count - 1, section: 0)], with: .automatic)
            self.tableView.endUpdates()

        }
    }

    task.resume()
}

原因:'无效更新:第 0 节中的行数无效。更新 (5) 后现有节中包含的行数必须等于更新前该节中包含的行数(0),加上或减去从该部分插入或删除的行数(1 插入,0 删除)以及加上或减去移入或移出该部分的行数(0 移入,0 移出)。

最佳答案

当您设置新的表格行时,您不会在数组中添加新数据。 添加此代码 self.modals.insert("<#DATA#>, atIndex: yourIndex)在表中插入新行之前。并尝试删除DispatchQueue

关于ios - 在 TableView 中插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445570/

相关文章:

iOS-dispatcherTimer 阻止触摸事件?

ios - 使用套接字架构的聊天应用程序。

iphone - 在Objective-C中替换字符串中的多个字符?

iphone - Xcode没有编译任何项目? 'clang failed with exit code 255'

ios - 使用扩展/UIgraphicscontext 将表情符号(字符串)呈现为 iOS 中可能的最高分辨率图像

swift - UICollectionView 单元格 View 重叠

iphone - EXC_BAD_ACCESS 错误.. textfield resignFirstResponder

ios - AFNetworking - AFHTTPRequestOperationManager 不返回数据

cocoa - 当 isGroupItem 委托(delegate)方法与 Swift 一起使用时,NSOutlineView 崩溃

ios - 如何在 UIButton 的标签 subview 上设置 alpha