如何从 objective c 中的 class 方法调用委托方法?
How to call a delegate method from a class method in objective c?
我想从 class 方法调用委托方法。
我的演示代码
ClassA.h
@interface ClassA: NSObject<MyProtocol>
+ (void)demoMethod;
@property (nonatomic, weak) id<MyProtocol> delegate;
ClassA.m
+ (void)demoMethod {
if ([self.delegate respondsToSelector:@selector(refreshViewController)]) {
[self.delegate refreshViewController];
}
}
上面代码的错误是:
- 'struct objc_class'
中没有名为 'delegate' 的成员
- 成员引用类型'struct objc_class *'是指针;你是否
意思是使用'->'?
请帮我从 class 方法中调用委托方法
谢谢!!!
您不能从静态 (class) 函数访问实例属性。
在你的例子中,在你的演示方法中,self
不是指 ClassA
的 实例 ,而是指 ClassA
本身.
这种行为没有通用的解决方案;它们都是一种变通方法,具体取决于您的需要:
- 保持对实例的静态引用(某种单例方法)
- 不要将
demoMethod
设为静态函数
- 将当前/最新委托保存在静态 属性 中并使用此
如果您想从 class 访问它,那么 delegate
应该是 class 变量:
@interface ClassA: NSObject<MyProtocol>
+ (void)demoMethod;
@property (nonatomic, weak, class) id<MyProtocol> delegate;
我想从 class 方法调用委托方法。
我的演示代码
ClassA.h
@interface ClassA: NSObject<MyProtocol>
+ (void)demoMethod;
@property (nonatomic, weak) id<MyProtocol> delegate;
ClassA.m
+ (void)demoMethod {
if ([self.delegate respondsToSelector:@selector(refreshViewController)]) {
[self.delegate refreshViewController];
}
}
上面代码的错误是:
- 'struct objc_class' 中没有名为 'delegate' 的成员
- 成员引用类型'struct objc_class *'是指针;你是否 意思是使用'->'?
请帮我从 class 方法中调用委托方法
谢谢!!!
您不能从静态 (class) 函数访问实例属性。
在你的例子中,在你的演示方法中,self
不是指 ClassA
的 实例 ,而是指 ClassA
本身.
这种行为没有通用的解决方案;它们都是一种变通方法,具体取决于您的需要:
- 保持对实例的静态引用(某种单例方法)
- 不要将
demoMethod
设为静态函数 - 将当前/最新委托保存在静态 属性 中并使用此
如果您想从 class 访问它,那么 delegate
应该是 class 变量:
@interface ClassA: NSObject<MyProtocol>
+ (void)demoMethod;
@property (nonatomic, weak, class) id<MyProtocol> delegate;