表格视图和外部数据源

Posted

技术标签:

【中文标题】表格视图和外部数据源【英文标题】:tableview and external data sources 【发布时间】:2017-05-28 15:58:46 【问题描述】:

我有一个带有 UITable 视图的视图控制器。

我的数据源是外部的。我已经使用数据任务转到带有某些参数的某个 URL,返回一个 JSON 响应,最后我得到一个 Swift 字典对象,其中包含我希望添加到表格视图单元格中的数据。所有这些都发生在 viewdidload 函数中。

我将如何使用我的字典中的数据填充我的表,因为这需要在我收到我的数据之后发生?

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ViewControllerTableViewCell
    cell.myLabel.text = json_surveys[indexPath.row]["SName"]
    return (cell)


那么我如何才能告诉 tableView 我的字典,但只有在我真正拥有字典之后?

【问题讨论】:

【参考方案1】:

听起来您想从完成数据任务的内部重新加载数据,您需要像这样将调用分派到主线程

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

【讨论】:

当我添加行时出现以下错误:对成员'tableView(_:numberOfRowsInSection:)'的模糊引用 您是否通过 IBOutlet 或以编程方式引用了您的表视图?【参考方案2】:

只要您从服务器收到数据,请使用self.tableView.reloadData()。这将重新加载您的 tableView 的所有单元格。

【讨论】:

当我添加行时出现以下错误:对成员'tableView(_:numberOfRowsInSection:)'的模糊引用【参考方案3】:

您需要将您的tableView 委托和数据源分配给此UIViewController

你可以这样做:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 
....

那么你需要在这个类中添加cellForRownumberOfRows协议函数。

我看到您已经添加了 cellForRow,您还应该添加 numberOfRows 函数,这就是您收到错误的原因。

像这样添加:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return dataArray.count

然后,您可以在完成从服务器获取数据并将其添加到数组中时调用tableView.reloadData(),例如数据数组。

【讨论】:

以上是关于表格视图和外部数据源的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSFetchedResultsController 搜索外部数据

单击表格视图中的按钮时如何更改表格视图外部的标签文本

Drupal:如何在具有来自外部数据库选项卡的数据的视图中添加公开过滤器

NSTableView 绑定和 tableViewSelectionDidChange

数据表按外部按钮/链接过滤

从外部数据库自动加载 Google 电子表格数据