我有一个UIViewController我从xib文件加载并推送到导航控制器堆栈。
在View Controller的头文件中,我有:
IBOutlet UILabel *myTitle;
我在代码中没有对“myTitle”做任何事情;我只是建立了联系。
当我编译并运行应用程序时,xib文件中没有定义标签(因此,没有附加到IBOutlet上),它可以工作。视图控制器动画进入视图就好了,显示了我在Interface builder中构建的视图。
如果我在界面构建器中向xib添加标签,但未将其连接到插座,并重新编译,它仍然有效,显示标签,其中包含我为其输入的默认文本。
但是如果我将IBOutlet myTitle连接到界面构建器中的标签,重新编译并运行应用程序,它会正常工作,直到我尝试将视图控制器推到导航控制器的堆栈上,此时我遇到了崩溃:< / p>
*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4558e20
如果我再次断开插座,它会恢复工作,并像以前一样显示静态标签。当视图显示时,似乎有一些时髦的事情,因为当我将视图推到导航堆栈时会发生崩溃。
我不应该将一个IBOutlet添加到UILabel或其他什么东西?或者还有其他事情发生了吗?关于在哪里寻找麻烦的任何建议?
答案 0 :(得分:9)
是的,它可能是由错误的参数名称引起的,例如试试这个:
IBOutlet UILabel title;
它会像这样调用一个例外:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x143f520'
答案 1 :(得分:6)
您是否为IBOutlet创建了一个访问者?
@property (assign) IBOutlet UILabel *myTitle;
然后,在你的.m文件中
@synthesize myTitle
答案 2 :(得分:5)
我遇到了同样的问题。原来*标题是保留的,Xcode没有告诉你这个。一旦我将其重命名为其他内容,它就会起作用。
答案 3 :(得分:1)
在我的情况下,我在UIToolBar中有一个UILabel。为我修复的是删除toolBar并添加一个带有新UILabel的新工具栏。 IB错误。