2009-10-29 81 views
7

我有一个UIViewController,我从xib文件加载并推入导航控制器堆栈。将UILabel连接到IBOutlet导致崩溃

在该视图控制器头文件,我有:

IBOutlet UILabel *myTitle; 

我不与代码“myTitle”,但做任何事情;我刚刚建立了连接。

当我编译并运行应用程序,并且在xib文件中没有定义标签(因此没有任何附加到IBOutlet的标签)时,它可以工作。视图控制器可以动态地查看视图,显示我在“界面”构建器中构建的视图。

如果我在界面构建器中为xib添加标签,但不将其连接到插座,然后重新编译,它仍然有效,并显示带有我为其输入的默认文本的标签。

但是,如果我将IBOutlet myTitle连接到界面构建器中的标签,重新编译并运行应用程序,它会正常工作,直到我尝试将视图控制器推到导航控制器的堆栈上,此时我发生崩溃:

*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4558e20 

如果我再次断开插座,它将恢复工作,显示静态标签。当视图显示时,看起来有些奇怪,因为当我将视图推到导航堆栈上时发生崩溃。

我不应该添加一个IBOutlet到UILabel或什么?或者还有其他事情正在发生?任何关于在哪里寻找麻烦的建议?

回答

6

您是否为IBOutlet创建了访问器?

@property (assign) IBOutlet UILabel *myTitle; 

,然后在你的.m文件

@synthesize myTitle 
+0

我有一个相同的问题,我创建了一个访问器。如果我设置了一个断点,它甚至在我到达第一行代码之前就爆发了。在我的情况下,问题出现在第一个(唯一)视图控制器中。 – Andiih 2009-11-13 09:48:09

9

是的,它可能被错误的PARAM名称,例如引起试试这个:

IBOutlet UILabel title; 

,它会调用一个异常这样的:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x143f520' 
+5

我试图调用IBOutlet'标题'时遇到此问题。如果我将它改名为theTitle,那么一切都很好。大概你必须小心你的变量名称以避免冲突。 – 2011-03-11 18:18:30

+2

事实上 - 'title'是保留的,并且没有很好的错误标记让你知道你已经在UIView内部定义了脚步。这一个让我今晚有一段时间难倒了。 – radven 2011-07-19 09:44:33

+0

因为大声哭闹,我也一直被困在这个年龄段,谢谢! – 2012-01-04 02:01:03

5

我有同样的问题。原来*标题是保留的,Xcode不会告诉你这一点。一旦我将它重命名为其他的工作。

1

在我的情况下,我在UIToolBar中有一个UILabel。对我来说固定的是删除toolBar并添加一个新的UILabel。一个IB错误。