我有两个视图控制器,第一个显示存储在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)
}
我在做什么错?
为什么你不使用'performBlock'或者'NSFetchedResultsController'? – quellish
您是否尝试过打印fetchRequest以确保它不是零? – beyowulf
是的,我检查了它,它不是零,它在主线程上运行 – Oleg