0

我是 OS X 编程的新手,但总体上喜欢它。我有以下问题:

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

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

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

  2. 然而,更重要的是,如果我随后遵循 Apple 示例,创建一个新的NSManagedObject通过NSEntityDescription:insertNewObjectForEntity:并使用,[stockController addObject:Newly created Object]我可以在添加它之前编写我想要的值,但是与“父”股票的关系不是由该addObjects:方法设置的。我相信我也能弄清楚如何写这个,但是 Cocoa 中的其他所有东西都非常优雅,这让人感觉很奇怪,所以我希望这里的人能很快解决这个问题,并为我指出一种优雅的方式。

4

1 回答 1

0

首先,让我们通过说明 Core Data 是为与 Cocoa 绑定机制(其中为您提供数组控制器等)一起工作而构建的,并且构建在键值编码/键值观察机制之上来消除魔力。Core Data 文档明确指出,您应该对这些技术有良好的背景,以了解事物如何/为什么工作。

对于您的第一个问题,您说您对 NSArrayController 的 -add: 方法感到困惑。你看过签名/原型吗?参数(传递 self 的地方)是 (id)sender,这是基本操作的标志(请参阅文档中的“目标/操作”)。你可以传递 self 、其他一些对象,如果你愿意,甚至可以传递 nil 。该参数不是您希望添加到由数组控制器管理的集合的对象。

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

于 2010-06-26T14:58:47.273 回答