0

我有 3 个部分的 TableView 分组样式,我需要动态添加行到这个部分。当我添加:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

没关系,但是当我更改数字 numberOfRowsInSection 时出现错误:

2017-03-29 04:21:42.032 TableView-Grouped[81597:7624167] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000106cc5d4b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x0000000103fd821e objc_exception_throw + 48
    2   CoreFoundation                      0x0000000106d1ec2f 

我的代码:

import UIKit

class ViewController: UITableViewController {

    var arr = ["Row 1", "Row 2", "Row 3"]
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.dataSource = self
        tableView.delegate = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
        tableView.reloadData()

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 3
    }
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = arr[indexPath.row]
        return cell
    }

}

在此处输入图像描述

4

1 回答 1

0

当我为我的自定义 TableView 添加一行时,我需要手动重新加载行的数据:

//swift 2.3
dispatch_async(dispatch_get_main_queue(), { () -> Void in
    self.tableView.reloadData()
})

//swift 3
DispatchQueue.main.async{
    self.tableView.reloadData()
}

如果您有一个附加数据的功能arr需要在那个时刻重新加载,例如:

 func refresh() {
        //remove if need
        arr.removeAll()
        self.GetData()
        DispatchQueue.main.async(execute: {
            self.myTable.performSelector(onMainThread: #selector(UICollectionView.reloadData), with: nil, waitUntilDone: true)

        })
    }
于 2017-03-28T20:38:37.900 回答