2015-11-25 82 views
0

我有两个视图控制器,第一个显示存储在CoreData中的对象列表,第二个创建新的对象。swift-NSMangedObjectContext不刷新数据

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

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 
     } 
    } 

CreateNewProject:

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) 

    } 

我在做什么错?

+0

为什么你不使用'performBlock'或者'NSFetchedResultsController'? – quellish

+0

您是否尝试过打印fetchRequest以确保它不是零? – beyowulf

+0

是的,我检查了它,它不是零,它在主线程上运行 – Oleg

回答

1

managedObjectContext.executeFetchRequest(fetchRequest)正在向您返回一个静态数组,因此在底层数据更改时它不会更新。

您应该使用NSFetchedResultsController来代替,然后您可以在出现更改时收到更新通知。

+0

尝试使用NSFetchedResultsController,仍然是相同的结果 – Oleg