更新某些数据后如何在应用中刷新数据?

时间:2015-09-13 22:31:37

标签: swift swift2

我遇到更新联系人数据的问题。使用tableView查看no.1主视图我有联系人列表。从列表中点击一些人后,我有下一个tableView(查看2号[从视图1推送到视图2])的详细信息和按钮与编辑。接下来如果我按下编辑我有模态视图no3与编辑输入当我可以更改名称。 SAVE之后如何刷新

  1. tableView navBar中的标题
  2. backButton中的标题
  3. view1中的主tableView
  4. 我在我的观点中使用no1

    let managedObjectContext: NSManagedObjectContext? = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext
        var fetchedResultsController: NSFetchedResultsController?
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.configureView()
            fetchedResultsController = NSFetchedResultsController(fetchRequest: CLInstance.allContactsFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
            fetchedResultsController?.delegate = self
            do { try fetchedResultsController?.performFetch() } catch _ {}
            tableView.reloadData()
        }
    
     func controllerWillChangeContent(controller: NSFetchedResultsController) {
            tableView.beginUpdates()
        }
    
        func controllerDidChangeContent(controller: NSFetchedResultsController) {
            tableView.endUpdates()
        }
    
    
    
        func controller(
            controller: NSFetchedResultsController,
            didChangeObject anObject: AnyObject,
            atIndexPath indexPath: NSIndexPath?,
            forChangeType type: NSFetchedResultsChangeType,
            newIndexPath: NSIndexPath?) {
    
                switch type {
                case .Insert:
                    tableView.insertRowsAtIndexPaths(NSArray(object: newIndexPath!) as! [NSIndexPath], withRowAnimation: .Fade)
                    break
                case .Delete:
                    tableView.deleteRowsAtIndexPaths(NSArray(object: indexPath!) as! [NSIndexPath], withRowAnimation: .Fade)
                    break
                case .Move:
                    print("move")
                    //tableView.moveRowAtIndexPath(indexPath!, toIndexPath: newIndexPath!)
                    break
                case .Update:
                    print("update")
                    tableView.cellForRowAtIndexPath(indexPath!)
                    break
                }
        }
    

    我预计当我在此代码中保存数据时NSFetchedResultsController进行更新,但在我的日志文件中,我看到打印出来" MOVE"不是"更新"如何以其他方式做到这一点?

1 个答案:

答案 0 :(得分:1)

首先,您需要将Outlets配置为要更新的任何屏幕元素。然后你只需将他们的.text属性设置为新值。

tableView有点不同,你必须重新加载它:myTableView.reloadData()

只是一些问题:

  1. 如果您的myTableView没有重新加载,请确保

    覆盖func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath) - > UITableViewCell {

  2. 创建tableViewCell的函数使用更新的源来创建单元格。

    1. 在主线程上进行所有更新(如果您正在使用线程)