将数组数据从 ViewController 传递到 TableView
Posted
技术标签:
【中文标题】将数组数据从 ViewController 传递到 TableView【英文标题】:Pass arrays data from a ViewController to a TableView 【发布时间】:2017-09-13 22:40:38 【问题描述】:我找不到这种特殊情况,我必须将两个或多个字符串数组传递并附加到位于第二个 ViewController 中的 TableView 中。 我想在两个不同的 UILabel 中推送两个不同的字符串
我有一些数据通过 mainViewController 中的 UIAlertViewController 进入
var name = alertController.textFields?[0].text
var number = alertController.textFields?[1].text
然后我获取这些数据,每次我得到一组新的名称/数字时,我都会将它附加到 MainVC 中的字符串数组中
var playerNames = [String]()
var playerNumbers = [String]()
self.playerNames.append(name!)
self.playerNumbers.append(number!)
现在我用 .xib 创建了一个表格视图和一个自定义单元格,我会调用它并设置为这样的自定义标签
第二个 ViewController 中的 TableView
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->
UITableViewCell
customCell.tableViewCellNumber.text = mainVC.playerNumbers[indexPath.row]
customCell.tableViewCellName.text = mainVC.playerNames[indexPath.row]
return customCell
因此,对于每个新集合,它都会创建一个带有名称 + 编号的新行
我尝试了从 userDefaults 到 performForSegue 的任何方法,但它不起作用! 我可以很好地打印数组,但它根本不会显示新行。
编辑:实际问题
好的,我想我误解了 NsUserDefaults 的使用...目前我在我的第二个控制器的 viewDidLoad 中
if ((UserDefaults.standard.array(forKey: "playerNames")) != nil)
let playerNames = (UserDefaults.standard.array(forKey:
"playerNames") as? [String])!
print(playerNames)
它实际上打印了新值,现在我希望新的附加值显示在自定义单元格 label.text cell.nameLabel.text = The Value
我如何每次检索该值并存储它?
如果我尝试使用 playerNames,它说它不存在..
【问题讨论】:
很难说没有看到更多的代码。当您的数据集初始化或更改时,您是否调用tableView.reloadData()
?
嘿,编辑并添加了整个 VC,createView() 中发生了很多事情,所以这并不容易。我在 CellForRowAt 索引路径中尝试了 reloadData,但它不起作用。我想这只是我,我不知道如何使 UserDefaults 工作,因为如果我尝试在第二个 viewController 的 ViewWillAppear 中打印数组,实际的数组就在那里。
我建议在第二个视图控制器的viewWillAppear
中调用tableView.reloadData()
,而不是在cellForRowAtIndexPath
中。 tableView.reloadData()
将重新显示表格视图并触发对 cellForRowAtIndexPath
的调用。
我用实际更准确的问题编辑了我的问题.. 你能告诉克里斯吗?
【参考方案1】:
您是否在输入数据后同步用户默认值? UserDefaults.synchronize()
【讨论】:
我必须在单元格内同步它吗?我应该在 CellForRowAt IndexPath 里面做吗? 这不是回答,而是作为评论。 我无法发表评论,因为我没有足够高的声誉。我希望我可以评论其他人的帖子。告我 当你在 userdefaults 中插入一些东西后马上做以上是关于将数组数据从 ViewController 传递到 TableView的主要内容,如果未能解决你的问题,请参考以下文章