如何在其他视图中重新加载TableView?

Ski*_*kie 1 core-data tableview reloaddata swift

我在TableView中使用了一些CoreData基础。

当我尝试清除其他视图中的那些基础时,我的控制台日志中有一条消息。

CoreData:错误:严重的应用程序错误。在调用-controllerDidChangeContent:期间,从NSFetchedResultsController的委托捕获了一个异常。
无效的更新:部分0中的行数无效。更新(0)之后,现有部分中包含的行数必须等于更新(3)之前该部分中包含的行数,再加上或减去该数字从该部分插入或删除的行数(已插入0,已删除0),加上或减去移入或移出该部分的行数(移入0,移出0)。与userInfo(空)

用于删除CoreData数组我使用此代码

self.historyArray.removeAll()
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "History")
fetchRequest.returnsObjectsAsFaults = false

do {
    let results = try managedContext.executeFetchRequest(fetchRequest)

    for managedObject in results
    {
        let managedObjectData:NSManagedObject = managedObject as! NSManagedObject 
        managedContext.deleteObject(managedObjectData)
    }
} catch {
    print("Detele all data")
}
Run Code Online (Sandbox Code Playgroud)

我知道我需要重新加载TableView,但是如何在其他View中执行此操作?虐待尝试过此,但此代码不起作用。

var tableViewHistoryClass = HistoryView()
self.tableViewHistoryClass.tableView.reloadData()
Run Code Online (Sandbox Code Playgroud)

请帮助我修复此消息。

小智 5

您可以通过使用通知来实现。

  1. 在viewDidLoad方法中创建观察器,您可以在其中显示表视图数据。

    override func viewDidLoad() {
        super.viewDidLoad()
    
        NSNotificationCenter.defaultCenter().addObserver(self, selector:"refreshTableView", name: "reloadTable", object: nil)
    
    }
    
    func refreshTableView () {
        self.tableView.reloadData()
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 第二个视图控制器->在此视图控制器中,您可以更改数据(如果要这样做)或发送数据对象

    NSNotificationCenter.defaultCenter().postNotificationName("reloadTable", object: nil)
    
    Run Code Online (Sandbox Code Playgroud)

    因此,它将重新加载您的表格视图。