我正在尝试设置自定义委托协议,并且遇到一个我不理解的奇怪错误。我想知道是否有人可以指出我在这里做错了什么(我还是Ob-C和协议使用的新手)......
情况是我已经构建了自己的URLLoader类来管理从Internet加载和解析数据。我现在正在尝试为代表设置一个协议来实现它将响应URLLoader的事件。所以,下面是我的协议...
#import <UIKit/UIKit.h>
#import "URLLoader.h"
/**
* Protocol for delegates that will respond to a load.
*/
@protocol URLLoadResponder <NSObject>
- (void)loadDidComplete:(URLLoader *)loader;
- (void)loadDidFail:(URLLoader *)loader withError:(NSString *)error;
@end
但是,我对两个方法签名都收到以下错误:
Expected ')' before 'URLLoader'
我觉得我必须忽略一些小而愚蠢的东西。非常感谢任何帮助人们提供的帮助!
哎呀...有人指出我应该包含URLLoader.h。这是:
#import <Foundation/Foundation.h>
#import "URLLoadResponder.h"
/**
* URLLoader inferface.
*/
@interface URLLoader : NSObject {
NSString *name;
NSString *loadedData;
NSMutableData *responseData;
NSObject *delegate;
BOOL _isLoaded;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *loadedData;
@property (nonatomic, retain) NSObject *delegate;
- (void)loadFromURL:(NSString *)url;
- (void)addCompleteListener:(id)observer selector:(SEL)sel;
- (void)removeCompleteListener:(id)observer;
- (void)parseLoadedData:(NSString *)data;
- (void)complete;
- (void)close;
- (BOOL)isLoaded;
+ (NSURL *)makeUrlWithString:(NSString *)url;
+ (URLLoader *)initWithName:(NSString *)name;
@end
答案 0 :(得分:3)
您的标头中有一个很好的循环引用,因为每个标头都包含另一个标头(URLLoader
包含URLLoadResponder
,URLLoadResponder
包含`URLLoader)。
您可以使用转发声明来破解它:
#import <UIKit/UIKit.h>
//#import "URLLoader.h" <-- Remove it to break the circular reference
@class URLLoader; // <-- Forward declaration
/**
* Protocol for delegates that will respond to a load.
*/
@protocol URLLoadResponder <NSObject>
- (void)loadDidComplete:(URLLoader *)loader;
- (void)loadDidFail:(URLLoader *)loader withError:(NSString *)error;
@end