2016-03-01 70 views
0

我在更新我的UITableView時遇到問題。我有一個應用程序,基本UIViewController與導航項「添加新項目」UITableViewContioller。我可以添加字符串,然後轉儲數組以查看是否已添加。轉儲功能顯示陣列中添加的項目,但UITableView不會,即使在致電reloadData後。這是我的代碼。Swift - 添加到陣列後不能重新加載tableView

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 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 

} 
} 
+0

你確定屏幕上顯示的'table'是你調用'refresh'的那個? –

回答

0

嘗試改變這一點:

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

這樣:

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

如果碰巧refresh()獲取調用除了主線程以外,表視圖可能無法正確更新。可能不是問題,但它是一個好的第一步。

0

您需要在刷新函數中重新加載主線程中的數據。

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

我不認爲你應該有你要顯示在屏幕兩個獨立的視圖控制器。簡化可能最終會像@ J.Wang所說的那樣解決你在不同對象上調用方法的問題。您的屏幕應該使用添加了按鈕的導航控制器中嵌入的TableViewController進行處理。