【发布时间】: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)
}
我做错了什么?
【问题讨论】:
-
您为什么不使用
performBlock或NSFetchedResultsController? -
您是否尝试过打印 fetchRequest 以确保它不是 nil?
-
是的,我检查过了,它不是 nil,它是在主线程上运行的
标签: ios swift cocoa-touch core-data