关闭弹出框后表格视图没有更新?

Posted

技术标签:

【中文标题】关闭弹出框后表格视图没有更新?【英文标题】:Table view is not getting updated after dismissing the popover? 【发布时间】:2016-05-09 15:11:07 【问题描述】:

由于这个问题,我头疼了一段时间。我详细说明了我的场景。

我有一个表格视图,我可以在其中使用弹出框添加数据,该弹出框在单击导航栏中的“+”按钮时显示。我从弹出窗口中获取值,但我卡住的地方是,收到的数据没有反映在表格视图中。如果我来回移动它就会显示出来。尝试使用不同的可能性重新加载表,但没有任何效果。

如果你想尝尝我的代码,你可以在这里Data stored fails to display in the table view, in one to many relationship of core data?

谁能解决我的问题,非常感谢帮助。

【问题讨论】:

你使用哪个重载?当您调用它时,您是否在主线程中? cellForRow.. 是否被调用?当它发生时,你返回正确的单元格吗?需要更多信息来帮助您 Team table view controller 的 viewWillAppear 方法中,我从 coredata 中获取数据。在To Add teams 的提交方法中(这是我在弹出窗口中给出值时点击的按钮)。弹出框被关闭,但表格视图仍未更新为最新值。你能明白我想说的话吗? 我建议将您的代码转换为使用获取的结果控制器(就像您对成员所做的那样),并实现委托方法来更新表格视图。 这有必要吗?!是否还有其他方法可以实现这一目标? @PraveenKumar 如果您不想切换到 FRC,我会使用委托/协议模式:我会添加一个答案...... 【参考方案1】:

这里的想法是为添加团队弹出视图控制器提供一种方法来告诉团队表视图控制器重新加载其表视图。

    在 Add Team VC swift 文件中,定义一个协议:

    protocol AddTeamsDelegateProtocol 
        func didAddTeam()
    
    

    在 Add Team 类中,添加一个新的 delegate 属性,该属性是这样的:

    var delegate : AddTeamsDelegateProtocol? = nil
    

    在同一个类中,保存新Team时调用委托方法:

    @IBAction func submit(sender: AnyObject) 
        let entity = NSEntityDescription.entityForName("Teams", inManagedObjectContext: managedObjectContext)
        let team = Teams(entity: entity!, insertIntoManagedObjectContext: managedObjectContext)
        team.teamName = teamNamePO.text
        team.teamImage = teamImagePO.image
        do
            try managedObjectContext.save()
         catch let error as NSError
            print("\(error), \(error.userInfo)")
        
        self.delegate?.didAddTeam()
        dismissViewControllerAnimated(true, completion: nil)
    
    

    在 Team 表视图控制器中,实现 didAddTeam() 方法:

    func didAddTeam() 
        let request = NSFetchRequest(entityName: "Teams")
        do
            teamData = try managedObjectContext.executeFetchRequest(request) as! [Teams]
         catch let error as NSError 
            print("\(error), \(error.userInfo)")
        
        self.tableView.reloadData()
    
    

    确保 Team 表视图控制器符合协议

    class GroupTable: UITableViewController, NSFetchedResultsControllerDelegate, AddTeamsDelegateProtocol 
    

    在继续(或呈现)Add Teams 弹出框之前(我在另一个问题的代码中看不到这是如何完成的),设置 Add Teams 控制器的委托:

    addTeamsVC.delegate = self
    

【讨论】:

我是通过 NSNotificationCenter 完成的,无论如何感谢您的帮助 :)

以上是关于关闭弹出框后表格视图没有更新?的主要内容,如果未能解决你的问题,请参考以下文章

关闭导航弹出框后,共享 iAd 横幅会卸载广告

在表格视图中选择项目后无法关闭弹出框

实现网页弹出框后背景不能滑动的效果

弹出框控制器无法正确显示视图

Swift 3 Popover 昏暗背景

如何在表格视图的 didSelect 上显示弹出框