我對編輯/刪除UIListView
中與另一個對象有關的Core Data對象有疑問。跨視圖Swift編輯與NSFetchedResultsController相關的核心數據對象/如何格式化和使用NSPredicate塊?
爲了簡化問題,假設我有一個Family
對象的列表視圖。點擊姓氏打開所選Family
對象的FamilyMember
對象的列表視圖。我在Core Data中建立了Family
和FamilyMember
之間的一對多關係。
我執行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()
}
就像一個魅力。謝謝! – JeremyJ 2014-11-05 23:46:57
你在哪裏在上面的代碼中應用謂詞?我沒有看到它的任何地方。我自己正在努力。 – kakubei 2014-12-01 16:01:11
@kakubei - 在配置NSFetchedResultsController時(不在上面的代碼中)使用謂詞。當你定義FRC的底層時,你設置'fetch.predicate = predicate'。 – pbasdf 2014-12-01 16:34:00