我正在尝试制作一个核心数据应用程序,其中当您在 TableView 中选择一个“玩家”时,所有队友的列表会出现在第二个 tableView 中,其中一列表示这两个玩家在同一场比赛中玩了多少次“团队”(另一个实体)。

这让我完全陷入困境,因为虽然我知道如何从普通数组填充表格,但使用 ArrayControllers 和 Core Data 确实扰乱了我对情况的看法。

你会如何处理这个问题?

有帮助吗?

解决方案

您的问题是绑定问题,而不是核心数据问题。:-)

你绝对应该掌握 可可绑定 在处理核心数据之前。这是在文档中陈述的并且是非常正确的。

你的问题的主题似乎与正文不同,所以我都会回答。

向队友展示

除了核心数据之外,假设您有一个表示 Player 实例的表。玩家拥有一支球队。球队有很多球员。因此,可以推断 Player 的实例有“team.players”(减去其自身)作为队友。无论您是否使用核心数据来管理模型,整体关系都是如此。

如果您通读并掌握了 Cocoa Bindings,您会发现使用基本的设置并不难 主/细节 设置(为简单起见,为“详细信息”部分使用额外的阵列控制器)。您的 Master 数组控制器代表所有 Player 实例,而您的详细数组控制器代表 Teammates - 或 Master 的选择的“team.players”(减去其自身)。

Teammates 数组控制器将照常设置其实体和托管对象上下文(请参阅文档)。“contentSet”将绑定到主阵列控制器的“selection”控制器键,并以“team.players”作为模型键路径。

技巧是使用过滤掉主控制器选择的玩家 谓词. 。您可以使用阵列控制器来完成此操作 过滤谓词. 。也许格式为“self != %@”,其中“%@”代表主阵列控制器的选择。我将把谓词(它本身是一个复杂的主题)留给您。请记住,您可以在代码中([myController setFilterPredicate:myPredicate])或使用绑定来设置它们。谓词是 独立的 以及核心数据。

获得选择

由于阵列控制器负责表所代表的阵列,因此最好询问阵列控制器其选择是什么。一种方法是向其 -arrangedObjets 询问其 -selectedIndexes 处的对象。

NSArray * selectedObjects = [[myArrayController arrangedObjects] objectsAtIndexes:[myArrayController selectedIndexes]];

您还可以询问它的 -selectedObjects。文档(API 参考和概念文档)中描述的这两种方法之间存在差异,您绝对应该理解,但是 询问控制器是最重要的概念, ,无论您使用 NSArrayController 还是某些符合 和 协议的自定义控制器。

免责声明: 在一次清酒社交晚会后匆忙打字。没有检查错误。:-)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top