• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

objective-c - 告诉自定义委托(delegate)何时调用方法

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:14:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在 中创建了一个包含各种方法的自定义类,并且我还向该类添加了委托(delegate)方法,可以从导入我的自定义类的另一个类调用这些委托(delegate)方法。特别是我正在使用iOS。这是我的头文件 (.h) 和实现 (.m) 文件的一个小示例:

//iCloud.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@protocol iCloudDelegate;
@class iCloud;

@interface iCloud : NSObject {
    __weak id<iCloudDelegate> delegate_;
}

@property (nonatomic, weak) id <iCloudDelegate> delegate;

//Methods (abridged for StackOverflow)
+ (void)checkCloudAvailability;

@end

@class iCloud;
@protocol iCloudDelegate <NSObject>
//Methods (abridged for StackOverflow)
@optional
- (void)documentWasSaved;
@required
- (void)iCloudAvailableBOOL)status;
@end

以及我的部分实现(.m):

#import "iCloud.h"
@implementation iCloud
@synthesize delegate;

- (void)documentWasSaved {
    [[self delegate] documentWasSaved];
}

-(void)iCloudAvailableBOOL)status {
    [[self delegate] iCloudAvailable:status];
}

+ (void)checkCloudAvailability {
NSLog(@"Checking iCloud availablity...");
NSURL *returnedURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];

if (returnedURL){
    NSLog(@"iCloud is available");
} else {
    NSLog(@"iCloud not available. ☹");
}
}

我查看了许多教程、SO 帖子、示例代码等,试图弄清楚如何告诉委托(delegate)何时调用委托(delegate)方法,但我一直无法找到任何东西。大多数帖子显示实现应该添加委托(delegate)(使用 语法),然而我的自定义类实现不是我想要使用委托(delegate)的地方(它在未在其中创建委托(delegate)的另一个类)。

正如您在上面的示例代码中所见,我已经添加了委托(delegate)方法(在实现中),但据我所知,这一切都会在使用它的其他类中调用委托(delegate)方法。如果这是正确的,那么我如何让委托(delegate)调用这些方法(比如从我的 checkCloudAvailability 类,它不是委托(delegate)方法之一)?这是我正在尝试做的一个示例:

+ (void)checkCloudAvailability
    if (returnedURL){
      [[self delegate] iCloudAvailable:YES]; 
    ...
}

当我尝试使用 [[self delegate] methodName]; 行时,我收到以下错误,Xcode 假装它不再知道我在说什么:enter image description here

为什么会这样?为什么我不能告诉委托(delegate)何时调用委托(delegate)方法?这在委托(delegate)方法中工作得很好,但为什么不能在实现它的类中呢?

我们将不胜感激任何想法、想法、链接、教程、代码或帮助。



Best Answer-推荐答案


错误说它找不到方法 delegateclass 方法 的上下文中不可用(即用 + 表示的方法) > 标志)。这可能看起来令人困惑,因为类方法中的 self 不对应于实例,而是对应于类;另一方面,delegate 属性属于一个实例,这意味着它不可用。

要解决这个问题,您应该将 checkCloudAvailability 设为实例方法,或将其重写如下:

+(void)checkCloudAvailabilityWithDelegateid<iCloudDelegate>)delegate {
    ...
}

关于objective-c - 告诉自定义委托(delegate)何时调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14103578/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap