数组未与 tableView(numberOfRowsInSection) 方法连接
Posted
技术标签:
【中文标题】数组未与 tableView(numberOfRowsInSection) 方法连接【英文标题】:Array does not connect with the tableView(numberOfRowsInSection) method 【发布时间】:2017-03-30 00:04:00 【问题描述】:所以我有一个数组,我将存储从 http 请求获得的所有数据并将它们显示在 tableView 上,但似乎 tableView(numberOfRowsInSection) 无法识别数组中的更改,因为计数保持为 0。
class OrdersViewController: UIViewController
@IBOutlet weak var tableView: UITableView!
var arr = [[String: AnyObject]]()
var selectedIndex = -1
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
let baseUrl = "my url"
let consumer_key = "consumer_key"
let consumer_secret = "consumer_key"
let url = "\(baseUrl)?consumer_key=\(consumer_key)&consumer_secret=\(consumer_secret)&status=processing"
let headers2 = ["Accept": "application/json"]
Alamofire.request(url, headers: headers2)
.responseJSON response in
self.arr.append(data from request)
let url2 = "\(baseUrl)?consumer_key=\(consumer_key)&consumer_secret=\(consumer_secret)&status=pending"
Alamofire.request(url2, headers: headers2)
.responseJSON response in
self.arr.append(data from request)
print("arr", self.arr)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
print("after request", self.arr)
return self.arr.count
and some other codes...
我确实从 http 请求中成功获取了数据,并且它在我的 Alamofire 调用中得到了更新,但是“请求后”一直打印空数组,我不确定这里发生了什么。
如果有人能提出任何可以改变我思维过程的建议,我们将不胜感激。
提前致谢。
【问题讨论】:
【参考方案1】:您需要在更改self.arr
属性后调用tableView.reloadData()
。对应的documentation 提供了更多详细信息:
调用此方法重新加载所有用于构造表格的数据,包括单元格、节页眉和页脚、索引数组等。为了提高效率,表格视图只重新显示那些可见的行。
如果您计划在很多地方更改您的 self.arr
属性,您也可以添加一个 属性观察者:
var arr = [[String: AnyObject]]()
didSet tableView?.reloadData()
...所以你不需要复制和粘贴相同的代码;-)
【讨论】:
我把 self.tableView.reloadData() 放在 append 方法之后,但它仍然没有在 numberOfRowsInSection 函数中更新我的数组。此外,现在它给了我一个错误,说Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:]
和Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView (<UITableView: 0x7fc0e80fe600; frame = (0 20; 375 598);.....
。谢谢你的帮助。也许我的问题是别的。
@ckim16 欢迎您!看起来您可能还有其他问题,但不调用 reloadData()
也绝对是一个错误。【参考方案2】:
我建议您将您的请求和响应逻辑移动到一个函数中,然后从 viewDidAppear
而不是 viewDidLoad
调用该函数,并在调用之后使用 reloadData()
重新加载您的表格视图
【讨论】:
【参考方案3】:在 Viewdidload 中使用此代码
dispatch_async(dispatch_get_main_queue())
self.tableView.reloadData()
而不是
tableView.reloadData()
【讨论】:
这仍然为我的 numberOfRowInSection 函数打印一个空数组。 检查您的控制台,您的数组值是否显示为字符串。在您的值以字符串形式显示之前,您的数组为空。需要将字符串转换为数组。那么您的数组值不会显示为空。有什么问题可以告诉我控制台输出吗?以上是关于数组未与 tableView(numberOfRowsInSection) 方法连接的主要内容,如果未能解决你的问题,请参考以下文章
UITableView - 核心数据应用程序中的表视图崩溃,因为删除后行数无效