objective-c - Xcode 警告缺少协议(protocol)定义,即使使用了@protocol

标签 objective-c xcode protocols forward-declaration

由于我最近有一个导入周期,我将所有 #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/

相关文章:

ios - 无法使用 prepare for segue 方法执行 segue

objective-c - 如何通过 swift 使用 Chartboost 分析?

iphone - Unichar 转 Int 问题

ios - 使用自动调整大小的阿拉伯语英语 iPhone 用户界面?

swift - 有没有办法允许 Swift 协议(protocol)扩展访问实现所述协议(protocol)的类中的某些内容,但其他任何东西都无法访问?

swift - Swift 中是否可以自定义合成条件一致性?

php - 403 禁止错误 Objective c to PHP

iphone - project.pbxproj 中的 subversion 冲突正常吗?

xcode - 如何修复 "is a dynamic library, not added to the static library"警告?

ios - 将委托(delegate)协议(protocol)一致性添加到纯 swift 类