如何更新托管对象数据?
How to update managed object data?
我已经启动了我的第一个核心数据应用程序。我现在正在与一个名为 'Folder'.
的实体合作
第一个视图控制器在 table 视图中显示所有文件夹,我可以向其中添加并重新加载数据。这工作正常,因为它使用获取请求来填充 table。
override func viewWillAppear(animated: Bool) {
var error: NSError?
let request = NSFetchRequest(entityName: "Folder")
request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
self.events = moc?.executeFetchRequest(request, error: &error) as! [Folder]
self.UITable.reloadData()
}
然而,当通过 table 单元格转到另一个视图控制器时,我使用索引路径将选定的文件夹数据传递给控制器。例如
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "showDetails" {
let destinationVC = segue.destinationViewController as! FolderDetailsViewController
let indexPath = UITable.indexPathForSelectedRow()
let selectedFolder = folders[indexPath!.row]
destinationVC.selectedFolder = selectedFolder
}
}
我的第二个视图控制器使用从第一个 table 视图传递的数据显示在文本字段中:
var selectedFolder: Folder!
folderNameLabel.text = selectedFolder?.title
folderDetailsLabel.text = selectedFolder?.details
folderDateLabel.text = displayDate
然后我有一个模态 edit/save 从第二个控制器出现的模态中的文件夹数据:
//Edit and save event
let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
//Error
var error: NSError?
//Storing Data from fields
SelectedFolder!.title = FolderName.text
SelectedFolder!.details = FolderDetails.text
SelectedFolder!.date = FolderDate.date
context?.save(&error)
self.dismissViewControllerAnimated(true, completion: {});
当解散调制数据没有更新时,我必须回到第一个控制器重新加载数据并再次继续。
我认为这是因为我没有 NSFetchRequest
(或 NSFetchResultsController)来获取最新的更改。
当我在模式中进行更改时,重新加载 selectedFolder
数据的最佳方法是什么?
你似乎想打电话给 moc.refreshObject(folder, mergeChanges:true)
请参阅文档 here。
如果您的模态视图以全屏显示,您可以在 viewWillAppera() 中刷新第二个视图。
override func viewWillAppear(animated: Bool) {
{
folderNameLabel.text = selectedFolder?.title
folderDetailsLabel.text = selectedFolder?.details
folderDateLabel.text = displayDate
}
我已经启动了我的第一个核心数据应用程序。我现在正在与一个名为 'Folder'.
的实体合作第一个视图控制器在 table 视图中显示所有文件夹,我可以向其中添加并重新加载数据。这工作正常,因为它使用获取请求来填充 table。
override func viewWillAppear(animated: Bool) {
var error: NSError?
let request = NSFetchRequest(entityName: "Folder")
request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
self.events = moc?.executeFetchRequest(request, error: &error) as! [Folder]
self.UITable.reloadData()
}
然而,当通过 table 单元格转到另一个视图控制器时,我使用索引路径将选定的文件夹数据传递给控制器。例如
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "showDetails" {
let destinationVC = segue.destinationViewController as! FolderDetailsViewController
let indexPath = UITable.indexPathForSelectedRow()
let selectedFolder = folders[indexPath!.row]
destinationVC.selectedFolder = selectedFolder
}
}
我的第二个视图控制器使用从第一个 table 视图传递的数据显示在文本字段中:
var selectedFolder: Folder!
folderNameLabel.text = selectedFolder?.title
folderDetailsLabel.text = selectedFolder?.details
folderDateLabel.text = displayDate
然后我有一个模态 edit/save 从第二个控制器出现的模态中的文件夹数据:
//Edit and save event
let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
//Error
var error: NSError?
//Storing Data from fields
SelectedFolder!.title = FolderName.text
SelectedFolder!.details = FolderDetails.text
SelectedFolder!.date = FolderDate.date
context?.save(&error)
self.dismissViewControllerAnimated(true, completion: {});
当解散调制数据没有更新时,我必须回到第一个控制器重新加载数据并再次继续。
我认为这是因为我没有 NSFetchRequest
(或 NSFetchResultsController)来获取最新的更改。
当我在模式中进行更改时,重新加载 selectedFolder
数据的最佳方法是什么?
你似乎想打电话给 moc.refreshObject(folder, mergeChanges:true)
请参阅文档 here。
如果您的模态视图以全屏显示,您可以在 viewWillAppera() 中刷新第二个视图。
override func viewWillAppear(animated: Bool) {
{
folderNameLabel.text = selectedFolder?.title
folderDetailsLabel.text = selectedFolder?.details
folderDateLabel.text = displayDate
}