2010-05-27 99 views
1

我想设置一个自定义的委托协议,并得到一个奇怪的错误,我不明白。我不知道是否有人可以指出我在这里做错了什么(我还是新的Ob-C和协议使用)...在协议中的自定义类定义的错误

情况是,我已经建立了自己的URLLoader类来管理加载并从互联网上解析数据。我现在正在尝试为委托人设置一个协议,以便对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

你是否有在URLLoader.h结束遗留下来的一些流浪的东西呢? – 2010-05-27 15:37:24

+0

我们可以看到URLLoader.h吗? – deanWombourne 2010-05-27 15:46:01

+0

嗯......它似乎工作,如果我从URLLoader.h文件中删除URLLoadResponder导入。但是 - 这不会让我把URLLoader委托转换为NSObject 。对象属性是否允许通过协议定义进行转换? – bigmac 2010-05-27 16:03:44

回答

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 
+0

真棒,谢谢! – bigmac 2010-05-27 16:16:50