Objective c 给定(id)委托,您能告诉我类委托是什么类型的吗?

Objective c 给定(id)委托,您能告诉我类委托是什么类型的吗?,objective-c,Objective C,像这样向MyClass传递委托时 - (MyClass *)initWithDelegate:(id <MyDelegate>)delegate {..} 是否有可能知道我的代表是哪类人?由于被定义为id,委托似乎不会响应任何方法调用,如类、描述、respondsToSelector等 我希望能够跟踪谁在呼叫MyClass 提前谢谢 /Christian您可以调用[delegate class];获取委托的类 若代理并没有对此做出响应,则表示为零 编辑 既然您提到出现编译器错误,那

像这样向MyClass传递委托时

- (MyClass *)initWithDelegate:(id <MyDelegate>)delegate {..}
是否有可能知道我的代表是哪类人?由于被定义为id,委托似乎不会响应任何方法调用,如类、描述、respondsToSelector等

我希望能够跟踪谁在呼叫MyClass

提前谢谢

/Christian

您可以调用[delegate class];获取委托的类

若代理并没有对此做出响应,则表示为零

编辑

既然您提到出现编译器错误,那么您的委托就不符合协议对象。因此编译器无法将其识别为NSObject。您应该将协议MyDelegate的声明修改为以下内容:

@protocol MyDelegate <NSObject>

// ...

@end
您可以调用[委托类];获取委托的类

若代理并没有对此做出响应,则表示为零

编辑

既然您提到出现编译器错误,那么您的委托就不符合协议对象。因此编译器无法将其识别为NSObject。您应该将协议MyDelegate的声明修改为以下内容:

@protocol MyDelegate <NSObject>

// ...

@end

在无法修改协议本身的情况下,只需编写:

- (MyClass*) initWithDelegate:(id<NSObject, MyDelegate>)delegate {..}
然后“类”属性将可用。您可以替换NSObject或添加额外的协议来支持,从而要求参数为其他类型。例如:

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

在无法修改协议本身的情况下,只需编写:

- (MyClass*) initWithDelegate:(id<NSObject, MyDelegate>)delegate {..}
然后“类”属性将可用。您可以替换NSObject或添加额外的协议来支持,从而要求参数为其他类型。例如:

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

正如@sch所指出的,您可能希望使用调试语句检查委托是否为nil。NSLog@is零:%i,委托==零;正如@sch所指出的,您可能希望使用调试语句检查委托是否为nil。NSLog@is零:%i,委托==零;很抱歉,如果我尝试调用[delegate class],我的代码将无法编译,因为选择器“class”没有已知的实例方法。是的,确实如此!没有意识到需要将协议明确指定为NSObject。现在我可以从我要找的代表那里得到信息了。谢谢!很抱歉,如果我尝试调用[delegate class],我的代码将无法编译,因为选择器“class”没有已知的实例方法。是的,确实如此!没有意识到需要将协议明确指定为NSObject。现在我可以从我要找的代表那里得到信息了。谢谢!