使用NSFetchedResultsController跨视图快速编辑相关的Core Data对象/如何使用块格式化和使用NSPredicate?

时间:2014-11-03 06:13:54

标签: ios core-data swift nspredicate nsfetchedresultscontroller

我对{strong>编辑/删除 UIListView中与其他对象相关的核心数据对象有疑问。

为了简化问题,我们假设我有Family个对象的列表视图。点击系列名称将打开所选FamilyMember对象的Family个对象的列表视图。我在核心数据中设置了FamilyFamilyMember之间的一对多关系。

我执行了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()
}

1 个答案:

答案 0 :(得分:0)

你是在正确的轨道上,虽然谓词参数不必是字符串 - 你可以传递家庭对象本身:

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