由于我最近有一个导入周期,我将所有 #import
语句(关于我自己的文件)从 header 移动到相应的 .m
文件中.我还添加了 @class
和 @protocol
前向声明来安抚编译器。但是,我仍然收到以下警告:
Cannot find the protocol definition for 'MyCustomDelegate'.
正如我所说,在我在 @interface
block 中使用它之前,有一个 @protocol MyCustomDelegate
。有趣的是,只有在另一个文件中声明相应的委托(delegate)时才会出现此警告(其 header 导入到 .m
文件中)。
我读到一个解决方案是在单独的头文件中声明委托(delegate),然后将该文件直接导入到实现委托(delegate)的类的头中。这真的是要走的路吗?还有其他解决方案吗?我认为那些代表已经让我们的代码膨胀得够多了,现在我应该继续甚至为它声明一个自己的文件吗?
更好地说明问题的小示例代码:
NewFooController.h
#import <UIKit/UIKit.h>
@protocol NewFooControllerDelegate;
@interface NewFooController : UITableViewController
@property (nonatomic, weak) id<NewFooControllerDelegate> delegate;
@end
@protocol NewFooControllerDelegate
@end
HomeTableViewController.h
#import <UIKit/UIKit.h>
@protocol NewFooControllerDelegate;
// warning points to line below
@interface HomeTableViewController : UITableViewController <NewFooControllerDelegate>
@end
HomeTableViewController.m
#import "HomeTableViewController.h"
#import "NewFooController.h"
@implementation HomeTableViewController
@end
最佳答案
HomeTableViewController.h 引用协议(protocol),但尚未声明。 如果您在 HomeTableViewController.h 尝试使用它之前导入 NewTaskController.h,它应该可以解决您的问题。
当然你可以从 HomeTableViewController.m 中删除导入
关于objective-c - Xcode 警告缺少协议(protocol)定义,即使使用了@protocol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991145/