我有两个 View Controller ,第一个用于显示存储在 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)
}
我做错了什么?
最佳答案
managedObjectContext.executeFetchRequest(fetchRequest)
返回一个静态数组,因此它不会在基础数据更改时更新。
您应该改用 NSFetchedResultsController
,这样您就可以在发生变化时收到更新通知。
关于ios - swift - NSMangedObjectContext 不刷新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928451/