相互导入两个objective-c协议文件结束时出现编译器错误

相互导入两个objective-c协议文件结束时出现编译器错误,objective-c,Objective C,有两个协议,每个协议都在自己的文件中: // PMAService.h #import <Foundation/Foundation.h> #import "PMAPost.h" #import "PMAServiceProcessingDelegate.h" @protocol PMAService <NSObject> -(void)setupService; -(BOOL)processPost:(PMAPost *)post withDelegate:(id&

有两个协议,每个协议都在自己的文件中:

// PMAService.h
#import <Foundation/Foundation.h>
#import "PMAPost.h"
#import "PMAServiceProcessingDelegate.h"

@protocol PMAService <NSObject>

-(void)setupService;
-(BOOL)processPost:(PMAPost *)post withDelegate:(id<PMAServiceProcessingDelegate>)delegate;

@end

// PMAServiceProcessingDelegate.h
#import <Foundation/Foundation.h>
#import "PMAPost.h"
#import "PMAService.h"

@protocol PMAServiceProcessingDelegate <NSObject>

-(void)successfullyProcessedPost:(PMAPost *)post by:(id<PMAService>)service;
-(void)notProcessedPost:(PMAPost *)post by:(id<PMAService>)service withError:(NSError *)error;

@end
//PMAService.h
#进口
#导入“PMAPost.h”
#导入“PMAServiceProcessingDelegate.h”
@协议服务
-(无效)服务;
-(BOOL)processPost:(PMAPost*)带有委托的post:(id)委托;
@结束
//PMAServiceProcessingDelegate.h
#进口
#导入“PMAPost.h”
#导入“PMAService.h”
@协议PMAServiceProcessingDelegate
-(void)成功处理post:(PMAPost*)post by:(id)service;
-(void)notProcessedPost:(PMAPost*)post by:(id)service withError:(NSError*)错误;
@结束
每个协议都需要相反的方法声明。一旦我在每个文件中创建了导入,编译器就不能再编译了,因为它告诉我它找不到其中一个协议

PMAService.h
的错误消息(用于
PMAServiceProcessingDelegate.h
的导入语句)

  • 找不到“PMAServiceProcessingDelegate.h”文件
PMAServiceProcessingDelegate.h的错误消息(每个方法声明一条):

  • 找不到“PMAService”的声明
  • 找不到“PMAService”的声明
有什么我错过的吗?不允许像这样导入协议吗?

您有一个循环依赖项,可以使用转发声明来解决:

//PMAService.h
#进口
#导入“PMAPost.h”
@协议PMAServiceProcessingDelegate;
@协议服务
-(无效)服务;
-(BOOL)processPost:(PMAPost*)带有委托的post:(id)委托;
@结束

这听起来像个愚蠢的问题,但可能与此相关:您的两个protocol.h文件是否包含在项目中的文件列表中?换句话说,它们是否可以与所有其他.m&.h文件一起显示在Xcode窗口的左侧?还有,你好,迈克尔。是的,他们是。下面的albertamg已经用一个转发声明解决了我的问题。。。无论如何,谢谢你:)就这些?我只需要在其中一个文件上做这个。。。奇怪,它真的有效:-)从未见过这样的概念。非常感谢。
// PMAService.h
#import <Foundation/Foundation.h>
#import "PMAPost.h"

@protocol PMAServiceProcessingDelegate;

@protocol PMAService <NSObject>

-(void)setupService;
-(BOOL)processPost:(PMAPost *)post withDelegate:(id<PMAServiceProcessingDelegate>)delegate;

@end