【问题标题】:How does -newObject get called in Core Data?-newObject 如何在 Core Data 中被调用?
【发布时间】:2014-07-23 20:53:00
【问题描述】:

我在做Cocoa Programming: For Mac OS X 4th Edition,我在第 11 章。“基本核心数据”,我不知道如何调用 -(id)newObject

我们确实将add: 链接到carArrayController,但仅此而已。 如果我将-(void)add:(id)sender 添加到carArrayController,则不会调用-(id)newObject。 这告诉我有某种层次结构调用系统,但我找不到有关该主题的信息。它是怎么调用的?

-(id)newObject 来自 NSObjectController。

【问题讨论】:

标签: objective-c macos cocoa core-data cocoa-bindings


【解决方案1】:

CarArrayController 是 NSArrayController 的子类。在 CarArrayController 子类中,当您覆盖 -add:sender 时,您必须确保在您的方法中有 [super add:sender];,因为在 -add:sender 的 NSArrayController 方法中调用了 -newObject。当您覆盖子类中的方法时,您通常需要调用方法的 super 实现。

【讨论】:

  • 链接到add的按钮Add如何知道它必须调用-newObject?我没有明确地链接它们或调用它。然后如果我添加 -(void)add:(id)sender 按钮添加如何链接到 add: 知道它必须调用 -(void)add:(id)sender 而不是 -(id)newObject。
  • 您覆盖了-add:sender 并决定不调用-newObject。如果您通过调用[super add:sender]; 正确覆盖它,它确实会被调用。当您不覆盖add:sender 时,它已经通过super 被调用。当 NSArrayController (super) 调用 -add:sender 时,NSArrayController 中的那个方法就是调用 -newObject 的地方。 NSArrayController 是 NSObjectController 的子类,因此它可能会在其实现的早期调用[super newObject];
  • 我想改变我的评论,但你回答了。我试图找到与此相关的文档,但一无所获。是否存在这方面的文档,或者是错误试验的情况?它是否明确写在文档中添加:如果存在,将调用 newObject 或它要查找的内容的列表?
  • NSObjectController 的文档讲述了-newObject 以及它在添加和插入对象时的工作原理。我明白你的观点,你必须先了解-newObject,然后才能了解它。有点像试图查找如何拼写“肺炎”。
  • 谢谢迈克。因此,要弄清楚你必须弄清楚,Apple 是如何决定构建文档并理解编程术语的,但主要是文档结构背后的逻辑!即使那样,它也没有明确写出来。所以... Cars 继承自 NSArrayController。 NSArrayController 有add:(空文档) NSArrayController 继承自 NSObjectController 并且也有add:。在它的文档中,它提到了see -newObject。这是文档中将-add: 链接到-newObject 的唯一位置。我说的对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2017-11-11
相关资源
最近更新 更多