2015-06-25 68 views
1

我已經開始了我的第一個核心數據應用程序。我正在與一個名爲「文件夾」的實體合作。如何更新託管對象數據?

第一個視圖控制器在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的數據的最佳方法是什麼?

+0

我將刪除模態編輯器視圖,並使用第二個視圖控制器來編輯文件夾對象。這是iOS應用程序非常常見的設計。 iOS通訊錄應用就是一個很好的例子。 –

+0

@PeterZhou所以我可以禁用加載時編輯的文本字段,當我點擊編輯,然後讓他們編輯和保存? – RileyDev

+0

是的。你的觀點將有兩種模式。查看模式和編輯模式。 –

回答

0

如果全屏顯示模態視圖,則可以在viewWillAppera()中刷新第二個視圖。

override func viewWillAppear(animated: Bool) { 
{ 
    folderNameLabel.text = selectedFolder?.title 
    folderDetailsLabel.text = selectedFolder?.details 
    folderDateLabel.text = displayDate 
} 
+0

不幸的是,這是行不通的( – RileyDev

+0

是你全屏顯示的模態視圖嗎?如果是的話,你可以在行folderNameLabel.text = selectedFolder?.title中添加一個斷點來檢查viewWillAppear是否被調用? –

+0

是的,我檢查函數viewWillAppear是否被調用,它不會:/ – RileyDev

0

好像你想打電話給moc.refreshObject(folder, mergeChanges:true)

參見文檔here

+0

對不起,我似乎添加了創建新文件夾代碼而不是「編輯文件夾」代碼。我會在上下文中使用類似的方法嗎?如果這在模式中被調用,它將如何影響文件夾細節顯示控制器? – RileyDev

+0

我會想象你想在'viewWillAppear'中的文件夾細節控制器上調用它,這樣你就可以在每次訪問控制器時知道你擁有最新的信息。 – Killectro

相關問題