无法重新加载TableView

问题描述:

我有2个控制器:第一个显示所有记录在数据库中,第二个允许添加新记录。他们都与NavigationController连接。如果我要添加新记录并按下“返回”按钮,第一个控制器将不显示新数据(因为NavigationController,我猜)。 所以,我试着把tableView.reloadData()放在viewDidAppear()。它不会帮助。然后我试着用NSNotificationCenter(method from this thread)重新载入tableView,但它仍然没有显示新的数据。 这里是我的代码:无法重新加载TableView

func saveRecord() { 
    //Creating cloud record 
    let container = CKContainer.defaultContainer() 
    let privateDatabase = container.privateCloudDatabase 
    privateDatabase.saveRecord(cloudRecord, completionHandler: { (record, error) -> Void in 
     if (error != nil) { 
     print(error) 
     } 
     NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 
     //creating core data record 
     do { 
      try managedContext.save() 
     } catch let error as NSError { 
      print("Could not save \(error), \(error.userInfo)") 
     } 
     NSNotificationCenter.defaultCenter().postNotificationName("reloadHistoryController", object: nil) 
     }) 
    }) 
} 

override func viewDidLoad() { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadHistoryController:", name:"reloadHistoryController", object: nil) 
} 

func reloadHistoryController(notification: NSNotification){ 
    self.tableView.reloadData() 
} 

更新

dispatch_async(dispatch_get_main_queue(),{ 
     self.tableView.reloadData() 
}) 

不帮我。

+0

函数cellForRowAtIndexPath上的断点,以及在更新tableView时看它何时被调用。 – UlyssesR

+0

@UlyssesR它没有调用。我可以通过通知在控制台中打印一些东西,但它不想使用我的表格 – dsk1306

+0

您是否设置了tableview的委托? –

请检查您的没有。行计数是相同的时间,即当您加载firstviewcontroller和保存新记录后按下返回按钮。我认为你的数组不会用你添加的新数据初始化你的数据。请尝试在viewWillAppear()方法中初始化您的数组数据,然后重新加载您的tableview。

+0

它帮助,非常感谢。我把我的CoreData fetchRequest代码放在选择器func中,现在一切看起来都不错。 – dsk1306

+0

@ dsk1306乐意为您效劳。 :) –