gpt4 book ai didi

objective-c - 对象(持有 NSMutableArray)在父/子类中具有不同的内容

转载 作者:行者123 更新时间:2023-12-03 17:06:34 26 4
gpt4 key购买 nike

我有三个类:HopBill、HopBillController 和 HopBillSheetController。 HopBill 创建一个包含 NSMutableArray 的对象。出于测试目的,我已经在 HopBill 的 init 方法中向数组添加了一行。 HopBillController.h 有 #import "HopBill.h" 并且 HopBillController.m 在它的 awakeFromNib 方法中初始化该对象:aHopBill = [[HopBill alloc] init] ;。到目前为止,一切都很好。从 HopBillController.m 我可以调用 aHopBill 对象的方法。它检索在 init 等中插入的行。

HopBillSheetController 是 HopBillController 的子级,基本上是按下按钮后弹出的工作表。填写一些字段后,需要向HopBill 添加一行并关闭工作表。在 HopBillSheetController 中我有:

#import“HopBillController.h”

@interface HopBillSheetController : HopBillController {

我可以使用 HopBillSheetController.m 中的所有方法来检索 init 上插入的行。一切看起来都很好。但是,当我填写工作表中的字段并按“确定”(为了向 aHopBill 添加行)时,HopBillSheetController 会调用 HopBillController 中的一个方法:[super addHopAddition: [variety stringValue]];。该行被添加,但是当我从 HopBillController.m 中的 aHopBill 检索所有行时,它仅返回在 aHopBill 的 init 中插入的行。当我在工作表中执行相同操作时,它会返回在 aHopBill 的 init 中插入的行以及我刚刚在工作表中添加的行。

就好像我有两个 aHopBill 对象,但显然这需要是一个对象。我做错了什么?

最佳答案

您将类层次结构与 UI 对象层次结构混淆了。从类继承与子窗口完全不同。

您的 HopBillSheetController 类当前继承自 HopBillController。这意味着它实际上拥有自己的 HopBillController 实例作为其super。该实例与与您的窗口关联的实例完全分开。正如您所发现的,对其中一项的更改不会影响另一项。

这根本不是你想要的。您想要关联实际的对象,而不是类结构。如何进行取决于整个设置的创建和结构方式,但它可能归结为以下选项之一:

  • 如果您将 UI 放在 Interface Builder(或者我们现在所说的任何名称)中,则需要将适当的 IBOutlet 实例变量放入您的类中,并使用 UI 工具在它们之间建立连接。

  • 如果您在代码中建立连接,则需要添加属性(或其他合适的访问器方法),以便一个类中的代码可以获取另一个类中必要的对象实例。

无论哪种方式,您都应该失去两个类之间的虚假继承。

关于objective-c - 对象(持有 NSMutableArray)在父/子类中具有不同的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6402195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com