2011-12-21 62 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。