声明委托的麻烦

时间:2012-03-02 16:28:32

标签: objective-c ios delegates

我有两个视图,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'的协议声明”。

出了什么问题?

编辑:

enter image description here

//代码

enter image description here

错误:

enter image description here

4 个答案:

答案 0 :(得分:0)

  1. 确保拼写正确。
  2. 确保将AddEventViewController.h / .m添加到项目中。
  3. 除此之外,你所拥有的一切都很好。

    修改

    我建议的其他方法是重命名您的委托,也许存在命名冲突。虽然我没有看到任何与“添加”相关的问题。和&#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

这个在我的应用程序中运行