【发布时间】:2012-12-31 15:55:05
【问题描述】:
我在objective-c 中创建了一个包含各种方法的自定义类,并且我还在该类中添加了委托方法,可以从导入我的自定义类的另一个类中调用这些委托方法。特别是我正在使用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 帖子、示例代码等,试图弄清楚如何告诉委托何时调用委托方法,但我无法找到任何东西。大多数帖子显示实现应该添加委托(使用<DelegateName> 语法),然而我的自定义类实现不是我想要使用委托的地方(它在另一个没有委托的类中正在创建)。
正如您在上面的示例代码中看到的,我已经添加了委托方法(在实现中),但据我所知,这一切都会在使用它的其他类中调用委托方法。如果这是正确的,那么我如何让委托调用这些方法(比如来自我的checkCloudAvailability 类,它不是委托方法之一)?这是我正在尝试做的一个示例:
+ (void)checkCloudAvailability
if (returnedURL){
[[self delegate] iCloudAvailable:YES];
...
}
当我尝试使用 [[self delegate] methodName]; 行时,我收到以下错误,Xcode 假装它不再知道我在说什么:
为什么会这样?为什么我不能告诉委托何时调用委托方法?这在委托方法中可以正常工作,但为什么不能在实现它的类中呢?
我们将不胜感激任何想法、想法、链接、教程、代码或帮助。
【问题讨论】:
标签: objective-c objective-c ios class delegates