2014-11-03 33 views
0

我對編輯/刪除UIListView中與另一個對象有關的Core Data對象有疑問。跨視圖Swift編輯與NSFetchedResultsController相關的核心數據對象/如何格式化和使用NSPredicate塊?

爲了簡化問題,假設我有一個Family對象的列表視圖。點擊姓氏打開所選Family對象的FamilyMember對象的列表視圖。我在Core Data中建立了FamilyFamilyMember之間的一對多關係。

我執行NSFetchRequest來獲取我的初始表視圖控制器中所有'Family'對象的列表,並將它們放入NSFetchedResultsController。當點擊列表中的家庭時,該'家庭'對象被傳遞到FamilyMembersViewController,其中prepareForSegue

我現在面臨的問題是,因爲我在一個「家庭」對象直接傳遞從最初的視圖控制器FamilyMembersViewController,我從來沒有創建一個FetchRequest或FamilyMembersViewController一個NSFetchedResultsController。因此,在初始視圖中運行良好的某些編輯功能現在不適用於FamilyMembersViewController

如何在沒有NSFetchedResultsController的視圖中利用NSFetchedResultsController函數(如下所示)?我是否需要重新查詢核心數據,將結果限制爲特定的「家庭」對象?這看起來很浪費,因爲我已經在我的視圖中提供了該對象。

我是否正確接近此功能?我只是希望能有功能類似從一個視圖控制器到下一個

我試着做了一個名爲「familyMembers」我FamilyMembersViewController內的相應NSFetchedResultsController新陣列,並與這個前提是:

var predicate = NSPredicate(format: "family == %@", "\(self.family)") 

其中self.family是傳遞自家族的對象initialView。但在這種情況下,出於某種原因,「self.family」部分只返回一個空字符串,實際上它應該返回Family對象。即使它確實返回了Family對象,但似乎並沒有將它傳遞給謂詞會有所幫助,因爲謂詞似乎只匹配字符串。我無法弄清楚如何用塊語句格式化謂詞。

任何幫助將不勝感激!謝謝你的閱讀。

func controllerWillChangeContent(controller: NSFetchedResultsController!) { 
    tableView.beginUpdates() 
} 

func controller(controller: NSFetchedResultsController!, didChangeObject anObject: AnyObject!, atIndexPath indexPath: NSIndexPath!, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath!) { 
    switch type { 
    case .Insert: 
     tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Fade) 
    case .Delete: 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
    case .Update: 
     tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
    default: 
     tableView.reloadData() 
    } 
    families = controller.fetchedObjects as [Family] 
} 

func controllerDidChangeContent(controller: NSFetchedResultsController!) { 
    tableView.endUpdates() 
} 

回答

0

你是在正確的軌道上,雖然謂詞參數不必是字符串 - 你可以通過家庭對象本身:

var predicate = NSPredicate(format: "family == %@", self.family) 
+0

就像一個魅力。謝謝! – JeremyJ 2014-11-05 23:46:57

+0

你在哪裏在上面的代碼中應用謂詞?我沒有看到它的任何地方。我自己正在努力。 – kakubei 2014-12-01 16:01:11

+0

@kakubei - 在配置NSFetchedResultsController時(不在上面的代碼中)使用謂詞。當你定義FRC的底層時,你設置'fetch.predicate = predicate'。 – pbasdf 2014-12-01 16:34:00

相關問題