我已經開始了我的第一個核心數據應用程序。我正在與一個名爲「文件夾」的實體合作。如何更新託管對象數據?
第一個視圖控制器在tableview中顯示所有文件夾,我可以添加它並重新載入數據。這工作正常,因爲它使用獲取請求來填充表。
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()
}
segueing經由表格單元我所選擇的文件夾的數據傳遞給使用索引路徑控制器另一個視圖控制器時
然而。例如
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
}
}
我的第二視圖控制器使用從所述第一表格視圖中傳遞的數據在文本框以顯示:
var selectedFolder: Folder!
folderNameLabel.text = selectedFolder?.title
folderDetailsLabel.text = selectedFolder?.details
folderDateLabel.text = displayDate
我然後有一個模態編輯/保存在一個模態從出現的文件夾的數據第二控制器:
//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: {});
當駁回調製數據不更新,我得回去給第一控制器重新加載數據,並再次Segue公司。
我認爲這是因爲我沒有NSFetchRequest
(或NSFetchResultsController)來獲取最新的更改。
當我在模態中進行更改時,重新加載selectedFolder
的數據的最佳方法是什麼?
我將刪除模態編輯器視圖,並使用第二個視圖控制器來編輯文件夾對象。這是iOS應用程序非常常見的設計。 iOS通訊錄應用就是一個很好的例子。 –
@PeterZhou所以我可以禁用加載時編輯的文本字段,當我點擊編輯,然後讓他們編輯和保存? – RileyDev
是的。你的觀點將有兩種模式。查看模式和編輯模式。 –