First, I have seen this question as well as this, but my problem is not addressed there.
I have a protocol ProtocolA
defined in its own header file. Then I have two classes ClassA
and ClassB
which both conform to this protocol so the protocol-header is imported in their header files.
Now it gets a bit complicated. ClassA
is used (and thus imported) in a third ClassC
. This class conforms to a second protocol ProtocolB
. This protocol also has its own header file where it uses and imports ClassB
. So my ClassC
imports (either directly or indirectly) both ClassA
and ClassB
(which both import ProtocolA
). This gives me the following warning regarding ProtocolA
:
warning: duplicate protocol definition of '…' is ignored
Why is this happening? It was my understanding that the #import
macro was invented exactly for avoiding this kind of problems which we had with #include
. How can I solve the issue without using an include guard? I can't really remove any of the imports.
EDIT: here is the code to illustrate the situation:
ProtocolA.h
@protocol ProtocolA <NSObject>
- (void)someMethod;
@end
ClassA.h
#import "ProtocolA.h"
@interface ClassA : NSObject <ProtocolA>
...
@end
ClassB.h
#import "ProtocolA.h"
@interface ClassB : NSObject <ProtocolA>
typedef enum Type {
TypeB1,
TypeB2
} TypeB;
...
@end
ProtocolB.h
#import "ClassB.h"
@protocol ProtocolB <NSObject>
- (TypeB)someMethod;
@end
ClassC.h
#import "ProtocolB.h"
@interface ClassC : NSObject <ProtocolB>
...
@end
ClassC.m
#import "ClassC.h"
#import "ClassA.h" // the warning appears here
@implementation ClassC
...
@end