Iphone [UILabel copyWithZone:]:发送到实例的选择器无法识别

Iphone [UILabel copyWithZone:]:发送到实例的选择器无法识别,iphone,ios,copywithzone,Iphone,Ios,Copywithzone,我觉得我的头撞到了墙上(坦白说,我已经准备好了) 我正在尝试为视图设置背景。我需要设置的背景是一个图像,我正在使用这段代码(在另外两个UIViewController子类中工作得非常好-这是一个复制/粘贴到新文件中的代码): 正如我所说,这在另外两个地方工作得非常好,但是在这里,lineself.view.backgroundColor=bg抛出 'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecogniz

我觉得我的头撞到了墙上(坦白说,我已经准备好了)

我正在尝试为视图设置背景。我需要设置的背景是一个图像,我正在使用这段代码(在另外两个UIViewController子类中工作得非常好-这是一个复制/粘贴到新文件中的代码):

正如我所说,这在另外两个地方工作得非常好,但是在这里,line
self.view.backgroundColor=bg
抛出

'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x9259840'
没有更多的东西可供参考。我在IB中验证了顶级视图的引用出口设置为文件的所有者。我清理了项目并重新启动。我甚至关闭了Xcode并重新启动了它-不走运。我还缺什么

编辑:正如我提到的,没有太多的后堆栈跟踪,只有以下内容:

2012-05-28 13:13:56.997 OOKL[36012:17303] -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x92b79a0
2012-05-28 13:13:56.997 OOKL[36012:17303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x92b79a0'
*** First throw call stack:
(0x2933052 0x44c7d0a 0x2934ced 0x2899f00 0x2899ce2 0x2935bd9 0xaa92dd 0x6a4f40 0x6a4eeb 0x6bfd60 0xc0191a 0x2934e1a 0x289e821 0xc0046e 0xaa7e2c 0xaa83a9 0xaa85cb 0xb2b59 0xb1969 0x2934ec9 0x9e55c2 0x9e555a 0xa8ab76 0xa8b03f 0xa8a2fe 0xa0aa30 0xa0ac56 0x9f1384 0x9e4aa9 0x2ac6fa9 0x29071c5 0x286c022 0x286a90a 0x2869db4 0x2869ccb 0x2ac5879 0x2ac593e 0x9e2a9b 0x214d 0x20c5)
没有其他内容-在之前或之后。

尝试以下操作:

self.view.backgroundColor = [UIColor clearColor];
self.view.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:img].CGColor;

这显然是一个“过度发布”的问题

在您的示例中很难说明原因(因为代码看起来非常好),但事实是您在
UILabel
的实例上发送了一个
copyWithZone
选择器(而不是
UIColor
)我肯定会告诉我,
bg
已经过度发布,现在指的是
UILabel

检查稍后在代码中是否不再释放对象
bg

希望这有帮助

在第一次评论后编辑

您收到一个发送到实例的
copyWithZone无法识别的选择器,这很奇怪,因为我相信如果您的
self.view
类型错误(不是
UIView
)然后您将收到一个发送到实例的
setBackgroundColor无法识别的选择器,而不是
copyWithZone

为了更好地分析此问题,当引发异常时,我会在调试器中写入:

po [self view]
po [[self view] backgroundColor]

看看是否一切都像它应该的那样顺利。

我想这是Xcode的一个奇怪的bug,你不能每次都跟踪或复制它。我将问题缩小到IB中的一个特定UILabel。只要我将其连接到
IBOutlet UILabel*
,我就会收到此错误

经过进一步调查,发现问题的起因是姓名
title
。我已将标签声明为

IBOutlet UILabel *title;

我刚把名字改成
gtitle
,一切都如期进行。谁知道呢?。

这个问题昨晚发生在我身上,我确实有一个名为title的标签。当我把名字改成别的名字时,我的头发被扯了一点,但没有用。事实证明,我试图在VC中从文本字段向标签发送一个NIL值。我有4个VC,一个用户在VC 1的文本字段中输入一个标题,并将其存储到NSString类型的对象中。在VC 4中,该字符串被放入标签中。当用户没有在VC 1中输入标题时,就出现了NIL。我修复了当用户没有在VC1中输入标题时,为string对象指定一个默认值的问题。希望这能帮助别人

我遇到了一个类似的问题,我用这里提供的答案设法解决了这个问题

然而,在我的例子中,我有一个名为UIDateLabel的类(用于以格式化方式显示日期等)。编译和运行导致上述NSInvalidArgumentException

我怀疑可能有一个类叫做那样的,但谷歌在UIDateLabel上只显示了一些模糊的点击(并且没有一个像我看到的那样与苹果相关)。所以我假设有一段时间没有命名问题。。。直到我读了这里的答案并尝试了一下

所以我把名字改成了UIDateLabelAbc,一切都很完美。重命名回UIDateLabel不起作用,因为XCode告诉我已经有一个同名的类。因此,我在谷歌上搜索了一些内容,找到了一些声称列出UIKit.framework继承层次结构的wiki页面,并在该列表中找到了列出的UIDateLabel。然而,这就是我找到的关于这个类的所有信息,即它的存在。目前我还不知道它的作用、目的等

更新:
在阅读了命名约定之后,我现在意识到用UI作为类的前缀不是一个好的做法(至少可以这么说)。因此,不要在类前面加UI,这样可以避免这一点,也可能会避免一系列其他问题。

我在声明IBOutlet变量时遇到了这个错误,并将其命名为视图控制器中的其他变量。因此,更明智地重命名我的变量和函数解决了这个问题 就我而言

YOURBUTTON.addTarget(self, action: #selector(funCross), for: .touchUpInside)

//MARK:- My Function 
@objc func funWithSearch(screen: String)
{

}

if you focus on #selector(funCross) i am calling a function without object
当我用这个的时候,它的工作很好

YOURBUTTON.addTarget(self, action: #selector(funTemp), for: .touchUpInside)

//MARK:- My Function 
@objc func funTemp()
{
    funWithSearch(screen: "etc your desire string")
}

//MARK:- My Function 
@objc func funWithSearch(screen: String)
{

}

您的标签在此视图中是否正确连接?IB中的标签似乎存在问题。请在.h文件中创建类似的访问器@属性(分配)IBUILabel*标签;在您的gdb或lldb控制台中,键入bt以获取BackTrace此问题似乎与
self.view
有关,因为
self.view.backgroundColor=[UIColor whiteColor]
会导致完全相同的错误。很奇怪,我编辑了我的答案,使其比简单的注释更清晰。尝试此-
self.view.backgroundColor=[UIColor clearColor]
导致完全相同的错误。只是我的问题,使用标题。问题是,在另一个文件中,我也使用了标题,但一切都很好。这让我很痛苦……谢谢!事后看来,对于ivar来说,这绝对是一个糟糕的选择,但并不重要,所以我默认将其命名。来自Xcode@Orlando“头衔”引起了一个问题因为您在“UIViewController”子类中。“UIViewController”类已经有一个成员标题。如果您有导航栏,您可以设置“标题”字符串,它将显示在导航栏上。因此,如果您将“标题”视为标签,则会出现错误,因为“标题”实际上是一个“NSString”。我还必须将标题重命名为somthing还有侦察
YOURBUTTON.addTarget(self, action: #selector(funTemp), for: .touchUpInside)

//MARK:- My Function 
@objc func funTemp()
{
    funWithSearch(screen: "etc your desire string")
}

//MARK:- My Function 
@objc func funWithSearch(screen: String)
{

}