找不到“XXXX”的协议声明

时间:2013-04-30 15:36:07

标签: objective-c delegation

我遇到了这个问题。我有以下.h文件:

#import <UIKit/UIKit.h>

@protocol MapSettingsViewDelegate

- (void)settingsDidUpdate:(BOOL)scheme;

@end

@interface MapSettingsViewController : UIViewController

@property (nonatomic, assign) id <MapSettingsViewDelegate> delegate;
@property (nonatomic, strong) IBOutlet UINavigationBar *navBar;
@property (nonatomic, strong) IBOutlet UINavigationItem *titleItem;
@property (nonatomic, strong) IBOutlet UITableView *TableView;

- (id)init;
- (IBAction)saveAction:(id)sender;

@end

当我宣布以下内容时:

@interface MapViewController : UIViewController <MapSettingsViewDelegate>

编译器抱怨以下消息:

Cannot find protocol declaration for 'MapSettingsViewDelegate'

我在同一项目中的其他文件中具有相同类型的委托声明,这些文件在没有故障的情况下编译。我花了最后四个小时试图搞清楚我做错了什么。清理项目并不算什么。

3 个答案:

答案 0 :(得分:0)

问题解决了。 As suggested in this answer,我创建了一个具有不同名称的新类,并复制了上一课程中的所有编码。工作完美无瑕。似乎XCode失去了对某些东西的追踪。

答案 1 :(得分:0)

您遇到了预处理器问题。两个类都互相导入。我想你可以通过在协议声明下添加@class来解决这个问题,如下所示;并将#import“mapViewController.h”行移动到MapSettingsViewController.m文件中。 @class告诉编译器你将在其他地方(在.m文件中)包含类内容。

请注意,在MapViewController.h类文件的顶部,您可以像正常一样包含#import“MapSettingsViewController.h”。希望这有帮助。我早些时候遇到了同样的问题。

#import <UIKit/UIKit.h>

@protocol MapSettingsViewDelegate

- (void)settingsDidUpdate:(BOOL)scheme;

@end

@class MapViewController 

@interface MapSettingsViewController : UIViewController

@property (nonatomic, assign) id <MapSettingsViewDelegate> delegate;
...
...

答案 2 :(得分:-2)

导入MapSettingsViewController.h文件