协议中自定义类定义出错

时间:2010-05-27 15:23:56

标签: iphone objective-c

我正在尝试设置自定义委托协议,并且遇到一个我不理解的奇怪错误。我想知道是否有人可以指出我在这里做错了什么(我还是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

1 个答案:

答案 0 :(得分:3)

您的标头中有一个很好的循环引用,因为每个标头都包含另一个标头(URLLoader包含URLLoadResponderURLLoadResponder包含`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