self.delegate respondsToSelector:...不编译 [英] self.delegate respondsToSelector: ... does not compile

查看:735
本文介绍了self.delegate respondsToSelector:...不编译的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经使用可选方法实现了一个协议,在调用方法中我想将 respondsToSelector:发送到 self.delegate 在我发送消息之前,但是没有编译。失败消息是:

I've implemented a protocol with an optional method and in the calling method I want to send respondsToSelector: to self.delegate before I send the message, but that does not compile. The fail message is:

否选择器'respondsToSelector'的已知实例方法

作为解决方法,我清理了如下所示的代理,它编译了......

As a work-around, I "sanitized" the delegate as shown below, which compiles...

//MyClass.h:

@class MyClass;

@Protocol MyClassDelegate
- (void)myClass:(MyClass *)sender willDoSomething:(BOOL)animated;
@end

@interface MyClass : UIViewController

@property (nonatomic, weak) id<MyClassDelegate> delegate;

@end

//MyClass.m:

...
@synthesize delegate = _delegate;
...

id sanitizedDelegate = self.delegate; //Hmmmm... why does this work?

if ([sanitizedDelegate respondsToSelector:@selector(myClass:willDoSomething:)]) {
    [self.delegate myClass:self willDoSomething:animated];
}

我检查了一些帖子,包括这个,但它没有回答编译失败问题。

I checked a number of posts including this one but it does not answer the compilation fail issue.

此外,替代访问者不起作用...

Also, alternative accessors do not work...

[self delegate]
//or
_delegate

有没有人看过这个或者可以建议更好的处理方式?

Has anyone seen this or can advise a better way of handling?

IOS 5.0:(9A334),Xcode 4.2.1(4D502)

IOS 5.0:(9A334), Xcode 4.2.1 (4D502)

推荐答案

-respondsToSelector:是NSObject上的一个方法。假设您的 id 委托实际上是一个NSObject,并将其强制转换:

-respondsToSelector: is a method on NSObject. Either assume that your id delegate is in fact an NSObject, and cast it:

[(NSObject *)self.delegate respondsToSelector:@ selector(myClass:willDoSomething :))

或者,更好的是,明确地让你的委托NSObject:

Or, better, make your delegate explicitly an NSObject:

@property(非原子,弱)NSObject< MyClassDelegate> *委托;

或者使协议成为NSObject的子协议:

Or make the protocol be a sub-protocol of NSObject:

@protocol MyClassDelegate< NSObject>

这篇关于self.delegate respondsToSelector:...不编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆