我通過JSON獲取數據,當我滾動屏幕時,我有一個請求到服務器,有時數據可以結束,然後應用程序崩潰insertRows
我該如何解決它?insertView在表查看
這裏我的代碼:
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