【问题标题】:swift - NSMangedObjectContext doesn't refresh dataswift - NSMangedObjectContext 不刷新数据
【发布时间】:2016-02-28 22:45:08
【问题描述】:

我有两个视图控制器,第一个显示存储在 CoreData 中的对象列表,第二个用于创建新对象。

创建新对象后,我返回对象列表,但新创建的对象不存在。重新启动应用程序后,将显示新对象。这是我的代码:

ListOfProjectsViewController:

var projects:[ProjectItem] = []

lazy var managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    override func viewDidAppear(animated: Bool) {
        loadProjects()
    }

    func loadProjects() {

        do {
            let results = try managedObjectContext.executeFetchRequest(fetchRequest)
            projects = results as! [ProjectItem]

            tableView.reloadData()
        } catch let error as NSError {
            print("Could not fetch \(error), \(error.userInfo)")
        }

    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "CreateNewProjectSegue" {
            let vc = segue.destinationViewController as! CreateNewProjectViewController
            vc.project = NSEntityDescription.insertNewObjectForEntityForName("ProjectItem", inManagedObjectContext: managedObjectContext) as? ProjectItem
        }
    }

创建新项目:

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var project:ProjectItem?

@IBAction func saveAndCloseBtnPressed(sender: AnyObject) {
        project?.title = projectTitleField.text
        project?.number = projectNmField.text
        project?.comments = projectCommentsTextView.text

        try! project?.managedObjectContext?.save()

        do {
            try self.managedObjectContext.save()
        } catch {
            fatalError("Failure to save context: \(error)")
        }

        self.navigationController?.popViewControllerAnimated(true)

    }

我做错了什么?

【问题讨论】:

  • 您为什么不使用 performBlockNSFetchedResultsController
  • 您是否尝试过打印 fetchRequest 以确保它不是 nil?
  • 是的,我检查过了,它不是 nil,它是在主线程上运行的

标签: ios swift cocoa-touch core-data


【解决方案1】:

managedObjectContext.executeFetchRequest(fetchRequest) 正在返回一个静态数组,因此当底层数据发生变化时它不会更新。

您应该改用NSFetchedResultsController,然后您可以在发生变化时收到更新通知。

【讨论】:

  • 用 NSFetchedResultsController 试过了,结果还是一样
猜你喜欢
  • 1970-01-01
  • 2019-02-01
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 2018-01-27
相关资源
最近更新 更多