找不到XXX的协议定义

时间:2013-02-21 01:48:28

标签: objective-c protocols

我首先声明了一个协议,然后使用它。但是我收到警告“无法找到LeveyPopListViewDelegate的协议定义”。 这是代码:

@protocol LeveyPopListViewDelegate;

@interface LeveyPopListView : UIView <LeveyPopListViewDelegate,UITableViewDataSource,   UITableViewDelegate,UITextFieldDelegate>

//the content of LeveyPopListView

@end

@protocol LeveyPopListViewDelegate <NSObject>
//the definition for LeveyPopListViewDelegate
@end

如果我首先放置LeveyPopListViewDelegate定义,我就不能在协议中使用LeveyPopListView

7 个答案:

答案 0 :(得分:6)

我最终压制了该特定线路的所有警告,这不是理想的但效果很好。

// Forward-declare protocols (to avoid circular inclusion)
@protocol YourProtocol;
#pragma clang diagnostic push
// To get rid of 'No protocol definition found' warnings which are not accurate
#pragma clang diagnostic ignored "-Weverything" 

@interface YourClass: NSObject
// <YourProtocol>
#pragma clang diagnostic pop

确保你做推&amp; pop,否则你最终会被忽略这个文件的所有警告!

答案 1 :(得分:2)

如果你按照这篇文章中的好建议仍然有问题,试试干净吧。我在它上面搔了一会儿,干净的解决了这个问题。

答案 2 :(得分:1)

我总是这样做:

@class LeveyPopListView;

@protocol LeveyPopListViewDelegate <NSObject>
//the definition for LeveyPopListViewDelegate
@end

@interface LeveyPopListView : UIView <LeveyPopListViewDelegate,UITableViewDataSource,   UITableViewDelegate,UITextFieldDelegate>

//the content of LeveyPopListView

@end

答案 3 :(得分:0)

您必须先定义协议。试试如下

@protocol LeveyPopListViewDelegate <NSObject>
//the definition for LeveyPopListViewDelegate
@end

@interface LeveyPopListView : UIView <LeveyPopListViewDelegate,UITableViewDataSource,   UITableViewDelegate,UITextFieldDelegate>

//the content of LeveyPopListView

@end

答案 4 :(得分:0)

在协议定义中使用具体的类名称是不寻常的。你应该做什么(大多数情况下,异常可能适用......虽然它们是难闻的气味)是让你的类符合协议,并在委托协议定义中使用该类。

一个类需要成为自己的委托也是一种难闻的气味。我要仔细修改设计。

答案 5 :(得分:0)

当我将Swift协议导入到Objective C类时,这发生在我身上。帮助我的是将*-Swift.h文件添加到Objective C类文件中:

#import "MyApp-Swift.h"

并将协议声明为@objc

@objc protocol VerificationGate

答案 6 :(得分:0)

此外,如果您在其他文件中声明并定义了协议,则必须#import该文件,在这种情况下,前向声明将无济于事。

顺便说一句。切勿像某些答案所示抑制警告。