【发布时间】:2012-04-16 23:34:07
【问题描述】:
由于我最近有一个导入周期,我将所有#import 语句(关于我自己的文件)从标题移动到相应的.m 文件中。我还添加了@class 和@protocol 前向声明来安抚编译器。但是,我仍然收到以下警告:
Cannot find the protocol definition for 'MyCustomDelegate'.
正如我所说,在@interface-Block 中使用它之前,有一个@protocol MyCustomDelegate。有趣的是,只有在另一个文件中声明了相应的委托(其标头在 .m-文件中导入)时才会出现此警告。
我了解到一种解决方案是在单独的头文件中声明委托,并将该文件直接导入实现委托的类的头文件中。这真的是要走的路吗?还有其他解决方案吗?我认为那些代表已经把我们的代码臃肿得够多了,现在我应该继续为它声明一个自己的文件吗?
小示例代码更好地说明问题:
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
【问题讨论】:
-
在哪里导入 NewFooController.h?
-
抱歉,我复制并粘贴了部分代码。 ;) 我将
#import "NewTaskController.h"更改为#import "NewFooController.h。
标签: objective-c xcode protocols forward-declaration