2015-11-25 85 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