2012-02-23 73 views
1

当传递一个委托MYCLASS这样,鉴于(编号<MyDelegate>)委托,你能告诉什么样的类委托?

- (MyClass *)initWithDelegate:(id <MyDelegate>)delegate {..} 

是它在某种程度上可以告诉我的代表是什么样的课吗?被定义为id,委托似乎没有响应像类,描述,respondsToSelector等任何方法调用。

我希望能够跟踪谁调用MyClass!

在此先感谢!

/基督教

+0

正如@sch指出的那样,您可能希望将debug语句检查以查看委托是否为'nil'。 'NSLog(@“为零:%i”,委托== nil);' – 2012-02-23 17:04:02

回答

5

您可以拨打[delegate class];拿到班上delegate的。

如果delegate不响应,那就意味着它是nil

编辑

既然你提到你得到编译器错误,那么你的委托不符合协议NSObject。所以编译器不会将其识别为NSObject。你应该修改协议MyDelegate的声明如下:

@protocol MyDelegate <NSObject> 

// ... 

@end 
+0

抱歉,如果我尝试调用[委托类],我的代码将无法编译,因为“没有已知的选择器类的实例方法”。 – ckibsen 2012-02-23 20:59:55

+0

检查我编辑的文章,它现在解决你的问题吗? – sch 2012-02-23 21:14:40

+0

是的,的确如此!不知道你明确需要将协议指定为NSObject。现在我可以从我正在寻找的代表处获取信息。非常感谢! – ckibsen 2012-02-24 08:29:04

0

在这种情况下,当你不能修改协议本身,你可以简单地写:

- (MyClass*) initWithDelegate:(id<NSObject, MyDelegate>)delegate {..} 

那么“类”财产将可用。您可以替换NSObject(或添加其他协议)以支持其他类型(因此需要参数)。例如:

- (MyClass*) initWithDelegate:(id<NSObject, NSCoding, MyDelegate>)delegate {..}