我有两个视图,view1调用view2。我需要将数据从view2传递回view1。所以我试图建立一个代表。这是我在控制器2中看到的:
.h file
@protocol addEventDelegate <NSObject>
-(void) setAddedEventFlag:(BOOL) hasAddedEvent;
@end
@interface AddEventViewController : UIViewController <UITextFieldDelegate, UITextViewDelegate, UIPickerViewDelegate, UIPickerViewDelegate>
@property (weak, nonatomic) id delegate; //changed from strong to weak
然后我在.m文件中使用@synthesize委托
当尝试为第一个视图控制器包含addEventDelegate时,xcode找不到它:
.h file
#import "AddEventViewController.h"
@interface FieldReportViewController : UIViewController <UITextFieldDelegate,
UITextViewDelegate, UIPickerViewDelegate, UIPickerViewDelegate, addEventDelegate>
我收到错误:“找不到'addEventDelegate'的协议声明”。
出了什么问题?
编辑:
//代码
错误:
答案 0 :(得分:0)
除此之外,你所拥有的一切都很好。
修改强> 的
我建议的其他方法是重命名您的委托,也许存在命名冲突。虽然我没有看到任何与“添加”相关的问题。和&#39;设置&#39;,但我在过去时曾经遇到过问题,例如,&#39; new&#39;。
此外,清理您的项目,然后重建并查看是否有帮助。
如果项目中有多个目标,可能会出现这种情况,并且可能只将AddEventViewController.h / m添加到其中一个目标中,并且您正在构建/调试另一个目标。
答案 1 :(得分:0)
这是定义协议的正确方法
@protocol addEventDelegate; // forward declaration for delegate property
@interface AddEventViewController : UIViewController <UITextFieldDelegate, UITextViewDelegate, UIPickerViewDelegate, UIPickerViewDelegate>
{
id <addEventDelegate> *delegate
}
@property (weak, nonatomic) id <addEventDelegate> *delegate;
@end // interface
@protocol addEventDelegate <NSObject>
// @optional // if you want to make it optional
-(void) setAddedEventFlag:(BOOL) hasAddedEvent;
@end // protocol
答案 2 :(得分:0)
解决了这个问题。我有一个#import循环。我是#importing我的.h文件中的所有类。我在.h文件中更改为@Class并将#import's移动到.m文件中,现在就像魅力一样。
答案 3 :(得分:0)
您可以在addEventDelegate
文件
FieldReportViewController.m
@interface FieldReportViewController ()<AddEventDelegate>
@end
这个在我的应用程序中运行