2012-05-28 39 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變量時,出現此錯誤,並在該視圖控制器中給出與其他名稱相同的名稱。重命名我的變量和函數因此解決了問題

相關問題