2010-06-26 94 views
0

我是OS X编程新手,但一般都喜欢它。我有以下问题:优雅地将对象添加到arraycontroller,它本身链接到另一个arraycontroller?

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

这一切在我的用户界面中像魔术一样工作,我可以选择股票并添加/删除价格点,当它被选中时,但是,我需要能够以编程的方式进行此操作。

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

  2. 但是,更重要的是,如果我遵循Apple示例,请创建一个新的NSManagedObjectNSEntityDescription:insertNewObjectForEntity:并使用[stockController addObject:Newly created Object]我可以在添加它之前写入想要的值,但与“父”股关系不是由addObjects:方法设置的。我相信我也可以弄清楚如何写这个,但是可可的其他所有东西都可以如此优雅,这让人感觉很奇怪,所以我希望有人能够很快地清楚这一点,并指出我这样做的一种优雅方式。

回答

0

首先,让我们通过陈述核心数据驱散魔法是建立与可可绑定机制(它给你的阵列控制器,除其他事项外),并之上构建核心价值编码/键值观察机制工作。核心数据文档明确指出,您应该在这些技术中拥有良好的背景,以了解事情如何/为什么起作用。

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

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

+0

感谢您的回应 - 我在此期间去了-addObject:route,但不必调用-fetch,这可能是因为我在IB中设置了自动更新。 关于你的第一点 - 谢谢。没有这样想过。 – NSSunrider 2010-06-26 19:58:13

相关问题