将UILabel连接到IBOutlet会导致崩溃

CC.*_*CC. 7 iphone

我有一个UIViewController我从xib文件加载并推送到导航控制器堆栈.

在View Controller的头文件中,我有:

IBOutlet UILabel *myTitle;
Run Code Online (Sandbox Code Playgroud)

我在代码中没有对"myTitle"做任何事情; 我刚刚建立了连接.

当我编译并运行应用程序时,xib文件中没有定义标签(因此,没有附加到IBOutlet上),它可以工作.视图控制器动画进入视图就好了,显示了我在Interface builder中构建的视图.

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

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

*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4558e20
Run Code Online (Sandbox Code Playgroud)

如果我再次断开插座,它会恢复工作,如前所示显示静态标签.当视图显示时,似乎有一些时髦的事情发生,因为当我将视图推到导航堆栈时发生了崩溃.

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

sla*_*ick 9

是的,它可能是由错误的参数名称引起的,例如试试这个:

IBOutlet UILabel title;
Run Code Online (Sandbox Code Playgroud)

它会像这样调用异常:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x143f520'
Run Code Online (Sandbox Code Playgroud)

  • 当我试图调用IBOutlet'标题'时,我遇到了这个问题.如果我将其重命名为"theTitle",那么一切都很顺利.大概你必须在这里小心你的变量名,以避免冲突. (5认同)
  • 确实 - 'title'是保留的,没有好的错误标记让你知道你已经在UIView中踩到了内部定义.这一个让我今晚难倒了一会儿. (2认同)

dj2*_*dj2 6

您是否为IBOutlet创建了一个存取器?

@property (assign) IBOutlet UILabel *myTitle;
Run Code Online (Sandbox Code Playgroud)

然后,在你的.m文件中

@synthesize myTitle
Run Code Online (Sandbox Code Playgroud)


Fle*_*lea 5

我有同样的问题.原来*标题是保留的,Xcode没有告诉你这个.一旦我将其重命名为其他东西,它就有效了.