gpt4 book ai didi

xcode - self.delegate respondsToSelector : . .. 无法编译

转载 作者:行者123 更新时间:2023-12-03 08:31:20 25 4
gpt4 key购买 nike

我已经实现了一个带有可选方法的协议(protocol),并且在我想发送的调用方法中 respondsToSelector:self.delegate在我发送消息之前,但这不会编译。失败消息是:

选择器“respondsToSelector”没有已知的实例方法。

作为一种解决方法,我“清理”了委托(delegate),如下所示,它编译...

//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];
}

.

我查看了许多帖子,包括 this one但它没有回答编译失败问题。

此外,替代访问器不起作用......
[self delegate]
//or
_delegate

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

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

最佳答案

-respondsToSelector:是 NSObject 上的一个方法。要么假设您的 id委托(delegate)实际上是一个 NSObject,并将其转换为:
[(NSObject*)self.delegate respondsToSelector:@selector(myClass:willDoSomething:)]
或者,更好的是,让你的委托(delegate)明确地成为一个 NSObject:
@property (nonatomic, weak) NSObject<MyClassDelegate>* delegate;
或者使协议(protocol)成为 NSObject 的子协议(protocol):
@protocol MyClassDelegate <NSObject>

关于xcode - self.delegate respondsToSelector : . .. 无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9579337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com