Iphone 有没有办法使用其他头文件的协议定义?
我在Objective-C中使用外来协议时遇到问题 除了添加附加协议,还有其他解决方案吗Iphone 有没有办法使用其他头文件的协议定义?,iphone,objective-c,Iphone,Objective C,我在Objective-C中使用外来协议时遇到问题 除了添加附加协议,还有其他解决方案吗 例如: 类别1.h #import "Class2.h" @protocol Class1Delegate <NSObject> @required -(NSArray*) someMethod; @end @interface Class1 : NSObject { Class2 *variable; #导入“Class2.h” @协议类代理 @必需的 -(N
例如: 类别1.h
#import "Class2.h"
@protocol Class1Delegate <NSObject>
@required
-(NSArray*) someMethod;
@end
@interface Class1 : NSObject
{
Class2 *variable;
#导入“Class2.h”
@协议类代理
@必需的
-(NSArray*)某种方法;
@结束
@接口类别1:NSObject
{
第2类*变量;
}
类别2.h
#import "Class1.h"
@interface Class2: NSObject {
id <Class1Delegate> delegate;
}
@property (nonatomic,assign) id <Class1Delegate> delegate;
#导入“Class1.h”
@接口类2:NSObject{
id代表;
}
@属性(非原子,赋值)id委托;
错误:
错误:找不到“ClassDelegate”的协议声明它应该按照您描述的方式工作。你确定没有别的事情发生吗 Class1.h是否导入Class2.h 更新: 如果Class1.h还导入Class2.h,那么您有一个头依赖循环: Class1.h导入Class2.h
类别2.h进口类别1.h 问题是:
#import Class1.h
@protocol Class1Delegate <NSObject>
@required
-(NSArray*) someMethod;
@end
#import "Class2.h" // moved here to avoid a cyclic dependency
@interface Class1 : NSObject
...
@协议代理
@必需的
-(NSArray*)某种方法;
@结束
#导入“Class2.h”//移动到此处以避免循环依赖关系
@接口类别1:NSObject
...
声明协议后,只需移动
#import
行即可。这应该可以正常工作,因为此模式一直在使用(例如,在UIScrollView.h中定义的UIScrollViewDelegate
,但您可以#import
并在视图控制器类声明中使用它)
出于好奇,Class2.m是否真正实现了所需的someMethod
方法
我们能看到更多的错误输出吗
另外,您不应保留该代表。您的
@property
指令应该是(非原子,赋值)
。看。啊,那就是你的问题了。你有一个标题依赖循环!你需要把事情分开。如果两个类之间确实存在循环依赖关系,我建议您重构类设计以消除这种反模式。当两个类相互导入时,它们本质上是同一个类。维基百科在上有更多的细节,所以在@Shaggy Frog上有一个关于这个的帖子:这是一个很好的建议。如果正确设计类,则不会发生循环依赖关系。Class2不会实现该方法,因为它只将该方法发送给委托