Swift - 添加到数组后 tableView 不重新加载

Posted

技术标签:

【中文标题】Swift - 添加到数组后 tableView 不重新加载【英文标题】:Swift - tableView not reloading after adding to array 【发布时间】:2016-03-01 05:26:02 【问题描述】:

我在更新我的 UITableView 时遇到问题。我有一个应用程序,它有一个基本的UIViewController 和一个带有导航项的应用程序,用于“添加新”项目到UITableViewContioller。我可以添加字符串,然后转储数组以查看是否已添加。转储函数显示数组中添加的项目,但 UITableView 不显示,即使在调用 reloadData 之后也是如此。这是我的代码。

这是点击保存后的控制台转储。

所以您可以在我保存后看到一些内容,但 UITableview 上没有显示任何内容。

UIViewController 类中,我有一个UIAlertAction 来接受文本和一个保存按钮。

      let table = TableViewController()


        let saveAction = UIAlertAction(title: "Save", style:UIAlertActionStyle.Default, handler: 
        alert -> Void in

        let firstTextField = alertController.textFields![0] as UITextField
        self.table.cityArry.addObject(firstTextField.text!)
        self.table.refresh()
    )

来自UITableViewController

 class TableViewController: UITableViewController 

var cityArry:NSMutableArray = ["Local"]

override func viewDidLoad() 
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self




func refresh()
    dump(cityArry)
    tableView.reloadData()


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return cityArry.count



override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->   UITableViewCell 
    let item = cityArry[indexPath.row]
    let cell = UITableViewCell()
    let label = UILabel(frame: CGRect(x:20, y:0, width:200, height:50))
    label.text = item as? String
    cell.addSubview(label)

    return cell


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 


    // Nothing here yet



【问题讨论】:

您确定屏幕上显示的table 就是您调用refresh 的那个吗? 【参考方案1】:

我认为您不应该为正在显示的屏幕设置两个单独的视图控制器。正如@J.Wang 所暗示的那样,简化最终可能会解决您在不同对象上调用方法的问题。应该使用嵌入在导航控制器中的 TableViewController 来很好地处理您的屏幕,并添加一个按钮。

【讨论】:

【参考方案2】:

你需要在刷新函数的主线程中重新加载数据。

dispatch_async(dispatch_get_main_queue(),  () -> Void in
self.tableView.reloadData()
)

【讨论】:

【参考方案3】:

尝试改变这个:

func refresh()
    dump(cityArry)
    tableView.reloadData() 

到这里:

func refresh()
    dispatch_async(dispatch_get_main_queue())  () -> Void in
        dump(cityArry)
        self.tableView.reloadData()
    

如果发生refresh() 被主线程以外的任何东西调用,则表视图可能不会正确更新。可能不是问题,但这是一个很好的第一步。

【讨论】:

以上是关于Swift - 添加到数组后 tableView 不重新加载的主要内容,如果未能解决你的问题,请参考以下文章

Swift 获取 tableview 数组计数并将其放置 textview

Swift - StackView 和添加约束,以编程方式添加视图到堆栈 - 加载后调整单元格高度?

Alamofire 和 Objectmapper 将数组数据添加到 tableview

更新 tableview 绑定到数组错误

Swift静态TableView添加额外的行

如何在 Swift 中从 Detail ViewController 更新 tableview 数组