2014-11-03 88 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

相关问题