ios - 加载表格 View 时应用程序崩溃并出现错误 "Invalid update: invalid number of sections."

标签 ios swift uitableview

应用程序崩溃并显示以下错误:

Invalid update: invalid number of sections. The number of sections contained in the table view after the update (6) must be equal to the number of sections contained in the table view before the update (3), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).' Please Help

我的代码:

func numberOfSections(in tableView: UITableView) -> Int {

    return newsArray.count

}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


    let cell = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath) as? NewsTableViewCell


    cell?.contentView.backgroundColor = UIColor.clear

    let whiteRoundedView : UIView = UIView(frame: CGRect(x: 10, y: 4, width: self.view.frame.size.width - 20, height: 410))

    whiteRoundedView.layer.backgroundColor = CGColor(colorSpace: CGColorSpaceCreateDeviceRGB(), components: [1.0, 1.0, 1.0, 0.9])
    whiteRoundedView.layer.masksToBounds = false
    whiteRoundedView.layer.cornerRadius = 2.0
    whiteRoundedView.layer.shadowOffset = CGSize(width: -1, height: 1)
    whiteRoundedView.layer.shadowOpacity = 0.2

    cell?.contentView.addSubview(whiteRoundedView)
    cell?.contentView.sendSubview(toBack: whiteRoundedView)

    let newsdata = newsArray[indexPath.section]

    let date = NSDate(timeIntervalSince1970: TimeInterval(newsdata.meta))
    let dayTimePeriodFormatter = DateFormatter()
    dayTimePeriodFormatter.dateFormat = "MMM dd YYYY "

    let dateString = dayTimePeriodFormatter.string(from: date as Date)


    print(dateString)

    if let newsImg = self.newsImageCache.object(forKey: indexPath.section as AnyObject){
        cell?.imageOut.image = newsImg as? UIImage
    } else {
        loadImageFromWeb(uri: newsdata.photo, cache: self.newsImageCache, indexpath: indexPath)

    }
    cell?.titleLabel.text = newsdata.title
    cell?.descLabel.text = newsdata.body


    return cell!
}




 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    if indexPath.section + 3 == self.newsArray.count {

        loadDatafromUrl()
    }
}



func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 20
}

// Make the background color show through
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = UIView()
    headerView.backgroundColor = UIColor.clear
    return headerView
}



func loadDatafromUrl(){
    let uri = "http://localhost/unani-info/admin/json/news.php"
    print(uri)
    if let url = URL(string: uri){

        let config = URLSessionConfiguration.default
        config.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData
        let session = URLSession(configuration: config)

        let task = session.dataTask(with: url, completionHandler: {

            (rawData,response,error) in

            if error != nil {
                print("Couldnt load data")
                print(error?.localizedDescription as Any)

            } else {
                if let data = rawData {
                    do{
                        if let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [AnyObject]{

                            for index in 0...json.count-1 {

                                if let datas = json[index] as? [String: AnyObject] {

                                    let newsObj = News()
                                    newsObj.title = datas["title"] as! String
                                    newsObj.body = datas["body"] as! String
                                    let photo = datas["photo"] as! String
                                    let photourl = "http://localhost/unani-info/admin/uploads/" + photo
                                    newsObj.photo = photourl
                                    newsObj.meta = datas["meta"] as! Int

                                    self.newsArray.append(newsObj)


                                }

                            }
                            DispatchQueue.main.async {
                                self.tableView.reloadData()
                            }

                        }
                    }catch{
                        print("error")
                    }
                }
            }
        })
        task.resume()
    }

}

最佳答案

你能尝试一下吗:

DispatchQueue.main.async {
    for index in 0...json.count-1 {
        if let datas = json[index] as? [String: AnyObject] {
            let newsObj = News()
            newsObj.title = datas["title"] as! String
            newsObj.body = datas["body"] as! String
            let photo = datas["photo"] as! String
            let photourl = "http://localhost/unani-info/admin/uploads/" + photo
            newsObj.photo = photourl
            newsObj.meta = datas["meta"] as! Int
            self.newsArray.append(newsObj)
        }
    }
    self.tableView.reloadData()
}

而不是:

for index in 0...json.count-1 {
    if let datas = json[index] as? [String: AnyObject] {
        let newsObj = News()
        newsObj.title = datas["title"] as! String
        newsObj.body = datas["body"] as! String
        let photo = datas["photo"] as! String
        let photourl = "http://localhost/unani-info/admin/uploads/" + photo
        newsObj.photo = photourl
        newsObj.meta = datas["meta"] as! Int
        self.newsArray.append(newsObj)
    }
}
DispatchQueue.main.async {
    self.tableView.reloadData()
}

关于ios - 加载表格 View 时应用程序崩溃并出现错误 "Invalid update: invalid number of sections.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43774916/

相关文章:

json - 无法将类型 'AnyObject?' 的值转换为预期的参数类型 '[AnyObject]!

swift - 使用 PDF 来自 xcasset 的 "Error loading image resource'

ios - NSKeyedArchiver: key 返回 nil - Swift

ios - 如何将此工具栏和文本字段保留在键盘上方?

ios - 使用 Cocoapods 指向 github 存储库时,是否可以指定子文件夹?

IOS-SWIFT-如何解决 Apple 文档代码中关于 KVO 的警告?为什么 Xcode 自动更正会引入错误?

ios - 是否可以让 UITableViewController 隐藏其单元格直到有内容,同时显示 "no content"消息?

iPhone:将表格 View 单元格滚动到自定义键盘对齐工具栏上方可见?

ios - 滚动时从 'cellForRowAtIndexPath' 保存到 CoreData 崩溃

ios - UIView 阴影和 InterfaceBuilder