2011-12-21 53 views
0

我已經開始在iOS 5中使用(ARC),但我遇到了一個經常出現的問題。編譯器有關未找到或未聲明方法的警告

第一種情況:

[[cell viewWithTag:999] setTextColor:[UIColor blackColor]]; 

此線引起該問題:例如消息

接收機類型 '的UIView' 不與選擇器聲明的方法 'setTextColor:'。

第二種情況:

[delegate setForTheFirstTime:TRUE]; 

這一行導致此問題:

用於選擇沒有已知的實例方法 'setForTheFirstTime:'。

當我使用委託時,我有很多像這樣的問題。

要解決這兩個問題,我必須使用像performSelector:這樣的方法嗎?

+2

呃,這與ARC有什麼關係? – JustSid 2011-12-21 16:19:39

+1

這些看起來都不像ARC相關的問題。您確定警告只在使用ARC時纔開始?也許你已經第一次轉換到LLVM? – 2011-12-21 16:20:03

+0

你有沒有試過把'viewWithTag:'調用給'UILabel *'或者其它什麼東西?是否將'delegate'鍵入爲'id '?看起來你只是得到了與發送消息給對象有關的警告,這些對象可能會或可能不會實現適當的方法。 – 2011-12-21 16:21:41

回答

2

你只需要聲明'委託'爲正確的類型,這將需要你導入該類型的頭。編譯器需要知道你的委託對象理解'setForTheFirstTime:',編譯器需要該方法的聲明。

在viewWithTag:的第一種情況下,您需要將結果轉換爲正確的類,以便編譯器可以瞭解該「setTextColor:」方法。

假設這種觀點是一個UILabel:

[(UILabel*)[cell viewWithTag:999] setTextColor:[UIColor blackColor]];

0

viewWithTag方法返回一個UIView的對象。所以當你調用setTextColor方法時,接收器是一個UIView,並且UIView沒有setTextColor方法。你必須把你的對象投給正確的課程。在這裏你想要一個UILabel。

相關問題