错误提示:
No know instance method for selector'respondsToSelector:'
之前写代理的时候,都没有去调用respondsToSelector:去检查我们的代理者有没有实现对应的方法。最近感觉不管是出于代码规范还是程序的安全性,都应该加上这个检查。于是就出现了这样的错误。
于是查了一下respondsToSelector:究竟是谁的方法。
好吧,由于我定义delegate的时候,是这样写的
@property (nonatomic,weak) id <StarsViewDelegate> delegate;
所以,id类型的delegate无法使用NSObject的respondsToSelector:方法了。
于是,我默默的去把id换成NSObject*试试能不能解决这个问题
@property (nonatomic, weak) NSObject < StarsViewDelegate >*
接下来,我又在万能的度娘找到了其他解决方式
@property (nonatomic, weak) id < StarsViewDelegate > delegate;
在还是上面这样写的情况下,让delegate强转一下类型为NSObject
if ([(NSObject *)self.delegate respondsToSelector:@selector(thouchStarsView:index:)])
{
[self.delegate thouchStarsView:self index:index];
}
也是可以的。
另外,让协议继承NSObject,也可以避免Xcode的报错
@protocol StarsViewDelegate<NSObject>
/**-----------------*/
if ([self.delegate respondsToSelector:@selector(thouchStarsView:index:)])
{
[self.delegate thouchStarsView:self index:index];
}