我在 objective-c 中创建了一个具有各种方法的自定义类我还向该类添加了委托(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)iCloudAvailable:(BOOL)status;
@end
以及我的实现的一部分(.m):
#import "iCloud.h"
@implementation iCloud
@synthesize delegate;
- (void)documentWasSaved {
[[self delegate] documentWasSaved];
}
-(void)iCloudAvailable:(BOOL)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)(使用 <DelegateName>
语法),但是我的自定义类实现不是我想要使用委托(delegate)的地方(它在委托(delegate)不存在的另一个类中)正在创建)。
正如您在上面的示例代码中看到的,我已经添加了委托(delegate)方法(在实现中),但据我所知,这一切都会调用其他使用它的类中的委托(delegate)方法。如果这是正确的,那么我如何让委托(delegate)调用这些方法(比如从我的 checkCloudAvailability
类中调用,它不是委托(delegate)方法之一)?这是我正在尝试做的事情的示例:
+ (void)checkCloudAvailability
if (returnedURL){
[[self delegate] iCloudAvailable:YES];
...
}
当我尝试使用[[self delegate] methodName];
时我收到以下错误,Xcode 假装它不知道我在说什么了:
为什么会发生这种情况?为什么我不能告诉委托(delegate)何时调用委托(delegate)方法?这在委托(delegate)方法内部工作得很好,但为什么在实现它的类中不行呢?
任何形式的想法、想法、链接、教程、代码或帮助将不胜感激。
最佳答案
错误表明它找不到方法委托(delegate)
在类方法的上下文中不可用(即用+
表示的方法) > 标志)。这可能看起来很困惑,因为类方法中的 self 并不对应于实例,而是对应于类;另一方面,属性delegate
属于一个实例,这意味着它不可用。
要解决此问题,您应该将 checkCloudAvailability
设为实例方法,或按如下方式重写:
+(void)checkCloudAvailabilityWithDelegate:(id<iCloudDelegate>)delegate {
...
}
关于objective-c - 告诉自定义委托(delegate)何时调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14103578/