gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:46:05 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com