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

时间:2016-03-01 05:26:03

标签: ios arrays xcode swift uitableview

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

enter image description here

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

enter image description here

所以你可以在保存后看到一些东西,但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

 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

}
}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

尝试更改此内容:

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

到此:

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

如果在主线程以外的任何其他地方调用refresh(),则表视图可能无法正确更新。可能不是问题,但这是一个良好的第一步。

答案 2 :(得分:0)

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

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