我对编辑/删除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