优雅地将对象添加到arraycontroller,它本身链接到另一个arraycontroller?

时间:2010-06-26 11:58:04

标签: objective-c cocoa nsarraycontroller

我是OS X编程的新手,但一般都喜欢它。我有以下问题:

我有两个核心数据实体通过一对多链接与各自的数组控制器(库存控制器和价格历史控制器,其中后一个控制器绑定到库存控制器,控制器密钥=选择和模型密钥路径= priceHistory,它是将股票实体链接到PriceDataPoint实体的关系,由价格历史记录控制器控制。

这在我的UI中就像魔术一样,我可以选择股票,并在选择时为每个股票添加/删除价格点。但是,我还需要能够以编程方式执行此操作。

  1. 如果我只是简单地使用正确的默认值调用[stockController add:self] UI更新,并将链接到所选股票 - 即使'self'不是正确的类/实体。这对我来说是一个混乱点,我不明白(我理解股票控制器通过KVO绑定知道所选股票,并且可能会根据需要设置关系,但我不知道如何'铸造' ''self',这是一个相当随机的类所需的对象类型(一个普通的NSManagedObject)?其次,如果我这样做,我如何获得一个引用回到该对象,以便我可以编辑它的值?

  2. 但更重要的是,如果我按照Apple示例操作,请创建一个新的NSManagedObjectNSEntityDescription:insertNewObjectForEntity:并使用[stockController addObject:Newly created Object]我可以在添加之前写下我想要的值但是{父母'股票的关系不是由addObjects:方法设定的。我相信我也可以弄清楚如何写这个,但是Cocoa中的其他东西都是如此优雅,这只是感觉很奇怪所以我希望这里的某个人可以很快清除它并指出我这样做的优雅方式。

1 个答案:

答案 0 :(得分:0)

首先,让我们通过声明构建Core Data来使用Cocoa Bindings机制(它为您提供阵列控制器等)来消除魔法,并且构建在Key Value Coding / Key Value Observing机制之上。核心数据文档明确指出,您应该掌握这些技术的良好背景,以了解事情的工作方式/原因。

对于你的第一个问题,你说你对NSArrayController的-add:方法感到困惑。你看过签名/原型了吗?参数(你传递给自己的地方)是(id)发送者,这是基本行为的标志(参见文档中的“目标/行动”)。如果你愿意,你可以传递自我,其他一些对象,甚至是零。参数不是您希望添加到由数组控制器管理的集合的对象。

对于第二个问题,如果您想自定义内容或保留对新插入对象的引用,那么您就处于正确的轨道上。你可以使用-addObject:方法(它确实将对象作为参数添加),但是你必须告诉数组控制器-fetch :(另一个w / sender作为参数的动作)以刷新控制器AND任何与其内容相关的东西(例如表/大纲)。