gpt4 book ai didi

objective-c - 如何在 ios 中不收到 "instance method not found"警告的情况下调用委托(delegate)函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:43 25 4
gpt4 key购买 nike

在我开发的应用中,经常会发现这样的代码行

[delegate aFunction];

生成“未找到实例方法“aFunction”(返回类型默认为 id)”警告

现在,我对 SO 做了一些研究,发现可以通过声明函数来删除警告,当你在 self ([self aFunction];) 上调用它时,但是没有任何答案说明我的情况是,当我使用委托(delegate)时。

所以,长话短说,我该怎么做才能在另一个类中正确调用委托(delegate)的方法?事情似乎工作正常,所以这不是主要问题,但警告意味着我没有做完全正确的事情所以我想了解这种情况下的最佳做法是什么

提前感谢您的帮助!

最佳答案

因此,如果我对您的理解正确,您可以通过如下声明您的协议(protocol)来消除您的问题:

@class SomeClass;
@protocol SomeClassDelegate <NSObject>
@required
- (void)thisObjectDidSomething:(SomeClass*)instance;
@optional
- (void)thisObjectDidSomethingUnimportant:(SomeClass*)instance;
@end

然后你的委托(delegate) ivar 和属性看起来像这样(如果你不使用 ARC,请使用 assign 而不是 weak):

@interface SomeClass () {
__weak id<SomeClassDelegate> delegate_;
}
@property (weak) id<SomeClassDelegate> delegate;

在任何要实现该协议(protocol)的类的 .h 文件中,执行以下操作:

@interface TCReader : NSObject <SomeClassDelegate> {

}

由于在 nil 上调用选择器是安全的,对于所需的方法,您可以:

[self.delegate thisObjectDidSomething:self]

但是对于可选方法,你最好:

if ([self.delegate respondsToSelector:@selector(thisObjectDidSomethingUnimportant:)]) {
[self.delegate thisObjectDidSomethingUnimportant:self]
}

这里的要点是,通过声明和使用协议(protocol),您让 XCode 知道这些方法是为实现该协议(protocol)的对象定义的。如果您要求您的委托(delegate)实现该协议(protocol),那么 Xcode 就会知道您的委托(delegate)定义了这些方法。

关于objective-c - 如何在 ios 中不收到 "instance method not found"警告的情况下调用委托(delegate)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8851184/

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