找不到协议声明

时间:2015-02-03 07:20:38

标签: ios objective-c xcode6

第一个ViewController控制器。 h文件

@protocol MyClassNameDelegate <NSObject>
-(void)getClassName:(NSString *)strClassName;
@end

@interface ViewController : UIViewController<MyClassNameDelegate>
{
    id <MyClassNameDelegate>delegate;

}

@property (nonatomic,strong)id<MyClassNameDelegate>delegate;

第一个ViewController控制器。 M档

-(void)getClassName:(NSString *)strClassName
{
    self.txtClass.text=strClassName;
}

从另一个View Controller调用此方法

所以我在seconView Controller .h文件中声明协议,如下面的代码

@interface ClassViewController : UIViewController <MyClassNameDelegate>  // Adopt protocol here
{
    NSArray * arryClass;

}

SecondView。 M档

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *cellText = cell.textLabel.text;

    ViewController * objViewController = [[ViewController alloc]init];

    objViewController.delegate=self;

    [objViewController.delegate getClassName:cellText];  // Call delegate method from here 


    NSLog(@"%@",cellText);
}

无法找到协议声明错误。这段代码有什么问题。

提前致谢。

3 个答案:

答案 0 :(得分:0)

您是否在ClassViewController.m文件中导入ViewController.h?这恰好触发了错误消息......

答案 1 :(得分:0)

将行[objViewController.delegate getClassName:cellText];更改为[objViewController getClassName:cellText];它可以正常工作。

答案 2 :(得分:0)

@property (nonatomic,strong)id<MyClassNameDelegate>delegate;

更改为

@property (nonatomic,weak)id <MyClassNameDelegate> delegateCustom;

并在任何地方使用delegateCustom。也许它会与自定义委托和tableview委托混淆。