我遇到了这个问题。我有以下.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'
我在同一项目中的其他文件中具有相同类型的委托声明,这些文件在没有故障的情况下编译。我花了最后四个小时试图搞清楚我做错了什么。清理项目并不算什么。
答案 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文件