【问题标题】:Using default tab-controller created project... first view controller doesn't respond to addsubview使用默认选项卡控制器创建项目...第一个视图控制器不响应 addsubview
【发布时间】:2010-09-21 10:15:39
【问题描述】:

我使用默认选项卡控制器项目创建了一个项目。我正在使用界面生成器来编辑 .xib 文件并添加图像和按钮。我将它们连接到界面构建器中的 FirstViewController 对象(我创建并将其类设置为与代码文件相同)。我使用IBoutletsIBActions 连接了所有内容。

一切正常,但后来我在界面构建器中做了一些更改(添加了UILabel),现在单击时运行的方法(我用调试器运行它)有一行添加了一个子视图视图控制器,它的行为就好像它没有被执行一样。该方法(和代码运行)执行没有错误(根据调试器),但视图根本没有被添加。这发生在我通过界面生成器进行一些更改之后。

现在,如果我通过单击相应的选项卡并将IBOutlet 拖动到UILabel 将我的按钮连接到“选定的第一个视图控制器”,则该标签现在有多个引用出口。现在,如果我对按钮执行相同的操作,则方法(IBAction)会执行两次,但实际上会添加并显示子视图。但是,我得到一个内存访问错误,因为我的IBAction(按钮)方法访问了一个存储一些东西的属性。我猜这与以某种方式在第一个视图控制器中创建内存但试图在选定的第一个视图控制器中访问它有关?如果这有任何意义?

我不知道为什么会发生这种情况以及为什么只是按钮突然停止工作。我试图尽我所能解释这个问题,这有点令人困惑。但是,如果有人有任何提示或想法,我很想听听你们对这个问题的看法以及如何解决它。

【问题讨论】:

    标签: iphone objective-c ios cocoa-touch


    【解决方案1】:

    您确定第一个插座实际上已连接。如果您命名一个插座,使其与在 nib 加载时设置的其他一些属性冲突(通过 initWithCoder:),它可能会导致事情最终无法正确连接。您可以通过 NSLog'ing 来检查 awakeFromNib 中网点的值。

    【讨论】:

      【解决方案2】:

      听起来 - 如果我弄错了,请随时纠正我 - 您正在将选项卡栏加载的视图中的操作附加到选项卡栏的控制器。这两个实体完全不同,您希望从视图访问的任何数据都应该从视图的控制器而不是选项卡栏的控制器中引用(它在加载和卸载其他视图控制器时应该有一个相当轻量级的工作)。同样,您不应该向视图控制器添加子视图,它不知道如何处理子视图 - 您应该使用视图控制器向视图添加子视图。虽然看起来像是语义问题,但视图控制器与视图根本不同。前者负责管理视图的内容和行为,并在必要时响应视图的操作,而后者只是一种在屏幕上显示事物的机制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多