JSONを使用してデータを取得しましたが、画面をスクロールするとサーバーに要求があり、データが終了してアプリケーションがクラッシュすることがありました。TableViewの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()
}
は理由:'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (5) must be equal to the number of rows contained in that section before the update (0), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
クラッシュメッセージとは何ですか? – Paulw11
@ Paulw11の理由 – Vasya2014