将 UILabel 连接到 IBOutlet 会导致崩溃
Posted
技术标签:
【中文标题】将 UILabel 连接到 IBOutlet 会导致崩溃【英文标题】:Connecting a UILabel to an IBOutlet causes a crash 【发布时间】:2009-10-29 17:13:12 【问题描述】:我有一个 UIViewController 我从一个 xib 文件加载并推送到导航控制器堆栈。
在视图控制器的头文件中,我有:
IBOutlet UILabel *myTitle;
我还没有对代码中的“myTitle”做任何事情;我只是在设置连接。
当我编译并运行应用程序时,在 xib 文件中没有定义任何标签(因此,没有任何附加到 IBOutlet),它可以工作。视图控制器的动画效果很好,显示了我在 Interface builder 中构建的视图。
如果我在界面构建器中向 xib 添加标签,但不将其连接到插座,然后重新编译,它仍然可以工作,并显示带有我为其输入的默认文本的标签。
但是,如果我将 IBOutlet myTitle 连接到界面生成器中的标签,重新编译并运行应用程序,它会正常工作,直到我尝试将视图控制器推送到导航控制器的堆栈上,此时我会崩溃:
*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x4558e20
如果我再次断开插座,它会恢复工作,并像以前一样显示静态标签。显示视图时似乎发生了一些奇怪的事情,因为当我将视图推送到导航堆栈时发生崩溃。
我不应该将 IBOutlet 添加到 UILabel 或其他东西吗?还是有其他事情发生?有什么建议可以去哪里找麻烦?
【问题讨论】:
【参考方案1】:是的,这可能是由错误的参数名称引起的,例如试试这个:
IBOutlet UILabel title;
它会像这样调用异常:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x143f520'
【讨论】:
我在尝试调用 IBOutlet 'title' 时遇到了这个问题。如果我将其重命名为“theTitle”,那么一切都很好。大概你必须小心你的变量名以避免冲突。 确实 - 'title' 是保留的,并且没有很好的错误标记让您知道您已经踩到了 UIView 中的内部定义。这个让我今晚难倒了一段时间。 大声哭泣,我也是,被困在那个年代了,谢谢!【参考方案2】:您是否为您的 IBOutlet 创建了访问器?
@property (assign) IBOutlet UILabel *myTitle;
然后,在您的 .m 文件中
@synthesize myTitle
【讨论】:
我有一个相同的问题,我创建了一个访问器。如果我设置断点,它甚至在我到达第一行代码之前就爆炸了。就我而言,问题出在第一个(唯一)视图控制器中。【参考方案3】:我遇到了同样的问题。原来 *title 是保留的,Xcode 没有告诉你这一点。一旦我将其重命名为其他名称,它就可以工作了。
【讨论】:
【参考方案4】:在我的情况下,我在 UIToolBar 中有一个 UILabel。为我解决的问题是删除工具栏并添加一个带有新 UILabel 的新工具栏。一个 IB 错误。
【讨论】:
以上是关于将 UILabel 连接到 IBOutlet 会导致崩溃的主要内容,如果未能解决你的问题,请参考以下文章
IBOutlet 用于约束并以编程方式将其连接到 UIButton