我在Objective-C中使用外部协议时遇到了麻烦。
除了添加其他协议之外还有其他解决方案吗?
示例:
Class1.h
#import "Class2.h"
@protocol Class1Delegate <NSObject>
@required
-(NSArray*) someMethod;
@end
@interface Class1 : NSObject
{
Class2 *variable;
} ...
Class2.h
#import "Class1.h"
@interface Class2: NSObject {
id <Class1Delegate> delegate;
}
@property (nonatomic,assign) id <Class1Delegate> delegate;
错误:
错误:找不到'Class1Delegate'的协议声明
答案 0 :(得分:2)
它应该按照你描述的方式工作。你确定没有其他事情发生吗?
Class1.h #import Class2.h吗?
<强>更新强>
如果Class1.h也导入Class2.h,那么你有一个头依赖循环:
Class1.h导入Class2.h
Class2.h导入Class1.h
问题在于:
#import Class1.h
你如何解决它取决于你,但这种循环表明你的设计出了问题。快速修复可能如下:
<强> Class1.h 强>
@protocol Class1Delegate <NSObject>
@required
-(NSArray*) someMethod;
@end
#import "Class2.h" // moved here to avoid a cyclic dependency
@interface Class1 : NSObject
...
您只需在声明协议后移动#import
行。
答案 1 :(得分:1)
这应该可以正常工作,因为这个模式一直在使用(例如在UIScrollView.h中定义的UIScrollViewDelegate
,但你可以#import
并在视图控制器类声明中使用它。 / p>
出于好奇,Class2.m实际上是否实现了所需的someMethod
方法?
我们可以看到更多的错误输出吗?
P.S。你不应该保留代表。您的@property
指令应为(nonatomic, assign)
。请参阅Ownership of Delegates, Observers, and Targets。