2012-05-28 42 views
53

我觉得我在这里撞墙(而且我已经准备好这么做了,坦率地说)。[UILabel copyWithZone:]:无法识别的选择器发送到实例

我想设置背景的视图。背景我需要设置为图像,我使用此代码(其中工程在另外两个子类的UIViewController完美的罚款 - 这是一个复制/粘贴到新的文件):

UIImage *img = [gameNode imageFromKey:@"background"]; 
UIColor *bg = [[UIColor alloc] initWithPatternImage:img]; 
self.view.backgroundColor = bg; 
[bg release]; 

正如我所说的,这工作在其他两个地方完全正常的,但是在这里,线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) 

闲来无事 - 之前或之后。

+0

您的标签在此视图中是否正确连接?看起来像IB中的标签问题。在.h文件中创建一个像这样的访问器。 @property(assign)IBOutlet UILabel * label; –

+0

你可以发布回溯 – 0x8badf00d

+0

在你的gdb或lldb控制台中,输入bt来获取回溯 – 0x8badf00d

回答

185

我想这是Xcode的那些奇怪的错误之一,你无法追踪或重现每一次。我将问题缩小到国际局的一个特定UILabel。只要我连接到IBOutlet UILabel *,我得到这个错误。

经进一步调查,事实证明名称title是造成该问题。我的标签,因为我的名字改为gtitle,一切都按预期一旦宣布为

IBOutlet UILabel *title; 

。谁知道呢?

+2

是的,使用标题作为IBOutlet变量的名称会造成很大的麻烦!感谢这.... – tomsoft

+0

只是我的问题,使用标题。事情是,在另一个文件我也使用标题,但都很好。 –

+0

同样的问题在这里XD改变它MainTitle工作 – WolfLink

0

试试这个:

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

试过这个--'self.view.backgroundColor = [UIColor clearColor]'会导致完全相同的错误。 –

0

这肯定看起来像一个 “过度释放” 的问题。

原因是很难在你的榜样,告诉(因为代码看起来绝对罚款),但你有一个copyWithZone选择的事实发送上的UILabel(而不是UIColor)的情况下肯定会告诉我,bg已被释放,现在指的是UILabel

检查后面的代码中是否不再释放对象bg

希望这有助于

编辑后,你的第一个评论

这是很奇怪的,你收到copyWithZone unrecognized selector sent to instance,因为我会相信,如果你的self.view是错误的类型(不UIView),那么您将收到setBackgroundColor unrecognized selector sent to instance而不是copyWithZone

为了更好地分析这个问题,当引发异常,我会写到调试器:

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

,看看是否一切顺利工作了理所应当的。

+0

这个问题似乎与'self.view',因为'self.view.backgroundColor = [UIColor whiteColor]'导致完全相同的错误。 –

+0

很奇怪,我编辑了我的答案,以便它比简单的评论更清晰。 – apouche

0

这个问题昨晚发生在我身上,我确实有一个名为title的标签。当把名字改成别的东西不起作用时,我把头发撕掉了。事实证明,我试图从文本字段向VC中的标签发送NIL值。我有4个VC,用户在文本字段中的VC 1处输入标题,并将其存储到NSString类型的对象中。该字符串被放入VC 4中的标签中。当用户不在VC 1中输入标题时,这就是NIL进入的地方。当用户没有在VC1中输入标题时,我通过给字符串对象分配默认值来修复它。希望能帮助别人。

0

我有一个类似的问题,我设法解决使用这里提供的答案。

然而在我的情况下,我有一个名为UIDateLabel的类(用于以格式化的方式呈现日期等)。编译和运行导致上面提到的NSInvalidArgumentException。

我怀疑是否有类似这样的类,但在UIDateLabel上搜索只显示一些模糊的命中(并没有链接到苹果,因为我可以看到)。所以我认为有一段时间没有命名问题......直到我在这里阅读答案并试一试。

因此,我将名称替换为UIDateLabelAbc,并且所有工作都完美无缺。重命名回UIDateLabel不起作用,因为XCode告诉我已经有一个具有该名称的类。所以我做了一些更多的搜索,并找到了一些声称列出UIKit.framework继承层次结构的wiki页面,并在该列表中找到了列出的UIDateLabel。然而,这就是我设法找到的关于该类的所有信息,即它存在的信息。目前我还不知道它的作用,目的等等。

更新: 阅读有关命名约定后,我现在认识到,用UI为你的类加前缀不是好习惯(至少可以这么说)。所以,不要用UI为你的类加上前缀,你会避免这个,也可能会遇到其他一些问题。

0

当我声明一个IBOutlet变量时,出现此错误,并在该视图控制器中给出与其他名称相同的名称。重命名我的变量和函数因此解决了问题

相关问题