2016-05-02 25 views
3

我建立使用的UITableViewController单个的ViewController应用在夫特2.动态负载的数据的UITableView迅速

我有这里的问题是,如果我加载viewDidLoad中函数内的数据,所述的UITableView与数据显示良好。我试图从一个自定义的委托方法,这是在数据被保存到核心数据后调用,然后self.tableview.reloadData()UITableView将不会显示数据中获取此数据。

从我的调试,像 override func numberOfSectionsInTableView(tableView: UITableView) -> Int override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

来看我自定义的委托方法

func didReceiveQualifications(qualifications: [Qualification]) { 
    print("didReceivedQualifications") 
    self.qualifications = qualifications 

    // Pass qualification to view 
    self.tableView.reloadData() 

} 
+0

该代码和安装应实际工作......你已经添加'print'语句的两种方法'cellForRowAtIndexPath'和'numberOfSectionsInTableView'以及看看他们什么时候打电话?在委托方法出现之前,调用它们是非常正常的。 **但是**在执行'self.tableView.reloadData()'后应该再次调用它们。此外,您可能想要显示'numberOfSectionsInTableView'函数的内容。 – luk2302

+0

我知道它不给你一个正确的答案,但你有没有考虑使用NSFetchedResultsController?它为您创建了Core数据对象和UITableViewController之间的桥梁。请参阅https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html – Gustanas

回答

1

可以通过依靠地方didReceiveQualifications()已经launched..in哪个线程运行前。 。

UI的所有更新都应在主线程中完成。

尽量让reloadData主线程:

func didReceiveQualifications(qualifications: [Qualification]) { 
    print("didReceivedQualifications") 
    self.qualifications = qualifications 

    // Pass qualification to view 
    dispatch_async(dispatch_get_main_queue()) { 
     self.tableView.reloadData() 
    } 
} 
+0

不确定这是否解决了问题,但它是一个很好的观点! – luk2302

+0

尝试一下,如果它不工作的报告结果,我有另一种想法.. –

+0

@AlessandroOrnano,但是,如果我开始滚动UITableView,所有的数据将消失 – ankermarco