使用默认的tab-controller创建的项目...第一个视图控制器不响应addsubview

时间:2008-11-08 06:33:41

标签: iphone objective-c ios cocoa-touch

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

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

现在,如果我通过单击相应的选项卡并将IBOutlet拖到UILabel将我的按钮连接到“选定的第一视图控制器”,该标签现在有多个参考插座。现在,如果我对按钮执行相同操作,则方法(IBAction)将执行两次,但实际上会添加并显示子视图。但是,我收到内存访问错误,因为我的IBAction(按钮)方法访问存储内容的属性。我猜这与以某种方式在First View Controller中创建内存但尝试在Selected First View Controller中访问它有关?如果这有意义吗?

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

2 个答案:

答案 0 :(得分:1)

你确定第一个插座实际连接了吗?如果您将插座命名为与nib加载时设置的其他属性冲突(通过initWithCoder :),则可能导致事情无法正常连接。您可以通过NSLog检出awakeFromNib中的出口值来检查。

答案 1 :(得分:1)

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