无法正确设置协议

时间:2014-05-19 14:34:51

标签: ios objective-c

我正在努力让协议正常运行但有一些问题。

我的协议class.h

@protocol FormViewDelegate <NSObject>
// sent when the user selects a row in the recent searches list
@required
- (void)getDirections:(NSString*)address :(NSString*)cityStateZip;


@end


@interface BaseFormViewController : NSObject
@property (nonatomic, weak) id<FormViewDelegate> delegate;


@end

我的viewcontroller.h

#import "BaseFormViewController.h"

@interface ViewController1 : <FormViewDelegate>

my viewcontroller.m

@implementation ViewController1
{
    BaseFormViewController *baseProtocol;
}

- (IBAction)getDirections:(id)sender {

    [baseProtocol getDirections:self.address.text :self.cityStateZip.text];

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    baseProtocol = [[BaseFormViewController alloc]init];
    baseProtocol.delegate = self;
    ...
}

我收到一个编译错误说明:没有可见的@interface用于&#39; BaseFormViewController&#39;声明选择器&#39; getDirections ::&#39;我在这做错了什么?

4 个答案:

答案 0 :(得分:0)

ViewController1需要实现所需的方法,因为您声明它符合FormViewDelegate协议。

@implementation ViewController1

- (void)getDirections:(NSString*)address :(NSString*)cityStateZip 
{
// your implementation
}

@end

答案 1 :(得分:0)

如果我是你,我会这样做:

@protocol FormViewDelegate <NSObject>
// sent when the user selects a row in the recent searches list
@required
- (void)getDirections:(NSString*)address :(NSString*)cityStateZip;
@end

然后是你的view controller.h

@interface ViewController1 : <FormViewDelegate>
@property (nonatomic, weak) id<FormViewDelegate> delegate;
@end

然后是您的视图控制器

@implementation ViewController1

@synthesize delegate

- (IBAction)getDirections:(id)sender {

    [baseProtocol getDirections:self.address.text :self.cityStateZip.text];

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    baseProtocol = [[BaseFormViewController alloc]init];
    baseProtocol.delegate = self;
    ...
}

这样您的视图控制器就可以实现协议本身

希望有所帮助

答案 2 :(得分:0)

这里因为你已经在@required标签下写了,所以你必须为该方法编写定义,否则它会给你警告你正在获得。

您可以在两个标签下编写方法。 1)@required:在这个标签中,你声明的所有方法都必须在你的课堂上指定。

2)@optional:在这个标签中,你声明的所有方法都是可选方法,如果你不写,你也不会收到警告。

答案 3 :(得分:0)

就这么简单。 BaseFormViewController不符合FormViewDelegate - 因此它不了解此方法:

- (void)getDirections:(NSString*)address :(NSString*)cityStateZip;

如果您想将该方法传递给BaseFormViewController,请使其符合FormViewDelegate。并且(可选)将委托属性从BaseFormViewController移动到ViewController1