Iphone 协议中的自定义类定义出错

Iphone 协议中的自定义类定义出错,iphone,objective-c,Iphone,Objective C,我正在尝试设置自定义委托协议,但遇到了一个我不理解的奇怪错误。我想知道是否有人能指出我在这里做错了什么(我对Ob-C和协议使用还是新手) 情况是,我构建了自己的URLLoader类来管理从internet加载和解析数据。我现在正试图为代理设置一个协议,以实现该协议,该协议将响应URLLoader的事件。所以,下面是我的协议 #import <UIKit/UIKit.h> #import "URLLoader.h" /** * Protocol for delega

我正在尝试设置自定义委托协议,但遇到了一个我不理解的奇怪错误。我想知道是否有人能指出我在这里做错了什么(我对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
我觉得我一定忽略了一些小而愚蠢的事情。任何人能提供的帮助都将不胜感激

哎呀。。。有人指出我应该包括urloader.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
#导入
#导入“urloadresponder.h”
/**
*我的脸。
*/
@接口URLLoader:NSObject{
NSString*名称;
NSString*加载数据;
NSMutableData*响应数据;
NSObject*委托;
BOOL_已加载;
}
@属性(非原子,保留)NSString*名称;
@属性(非原子,保留)NSString*loadedData;
@属性(非原子,保留)NSObject*委托;
-(void)loadFromURL:(NSString*)url;
-(void)addCompleteListener:(id)观察者选择器:(SEL)SEL;
-(void)removeCompleteListener:(id)观察者;
-(void)parseLoadedData:(NSString*)数据;
-(无效)完成;
-(无效)关闭;
-(BOOL)孤岛加载;
+(NSURL*)makeUrlWithString:(NSString*)url;
+(URLLoader*)initWithName:(NSString*)名称;
@结束

在标题中有一个很好的循环引用,因为每个标题都包含另一个(
URLLoader
包括
URLLOADREPSONDER
URLLOADREPSONDER
包括`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
#导入

//#导入“URLLoader.h”在URLLoader.h的末尾是否还有一些零散的东西?我们是否也可以看到URLLoader.h?嗯。。。如果我从URLLoader.h文件中删除URLLOADERSponder导入,它似乎可以工作。但是–这不允许我将URLLoader委托强制转换为NSObject。是否不允许使用协议定义强制转换对象属性?
#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