我对{strong>编辑/删除 UIListView
中与其他对象相关的核心数据对象有疑问。
为了简化问题,我们假设我有Family
个对象的列表视图。点击系列名称将打开所选FamilyMember
对象的Family
个对象的列表视图。我在核心数据中设置了Family
和FamilyMember
之间的一对多关系。
我执行了NSFetchRequest
来获取所有'家庭'我的初始表中的对象查看控制器并将它们放入NSFetchedResultsController
。当列表中的某个家庭被点击时,该家庭'对象通过FamilyMembersViewController
传递到prepareForSegue
。
我面临的问题是,因为我过了一个家庭'直接从初始视图控制器到FamilyMembersViewController
的对象,我从来不必在NSFetchedResultsController
中创建FetchRequest或FamilyMembersViewController
。因此,一些在初始视图中效果很好的编辑功能现在无法在FamilyMembersViewController
中工作。
如何在没有NSFetchedResultsController
的视图中利用NSFetchedResultsController
功能(例如以下内容)?我是否需要重新查询核心数据,将结果限制为特定的家庭"宾语?这似乎是一种浪费,因为我已经在我的视图中提供了该对象。
我是否错误地使用此功能?我想我只是希望从一个视图控制器到另一个视图控制器的功能类似。
我试过制作一个名为“家庭成员”的新阵列。我的NSFetchedResultsController
中有一个相应的FamilyMembersViewController
,并用它来预测:
var predicate = NSPredicate(format: "family == %@", "\(self.family)")
其中self.family
是'家庭'从initialView
传递的对象。但在这种情况下,由于某种原因," self.family" part只返回一个空字符串,当它真的应该返回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 :(得分:0)
你是在正确的轨道上,虽然谓词参数不必是字符串 - 你可以传递家庭对象本身:
var predicate = NSPredicate(format: "family == %@", self.family)