委托在两个视图控制器之间不起作用

时间:2014-10-08 23:45:20

标签: objective-c uiviewcontroller delegates

我无法使用委托方法。

我有2个观点。在视图A中,我使用委托说我按了一个按钮来查看B. 视图B很好地接收消息。 我想发送一条消息说B视图已收到消息。

因此,我的代表从A到B的视图有效但B到A的视图不起作用。

.h:

#import <UIKit/UIKit.h>


    @protocol ButtonProtocolName <NSObject>
    - (void)toucheEnter:(id)sender;      
    @end

    @interface ClavierKsViewController : UIViewController
    @property (nonatomic, assign) id <ButtonProtocolName> delegate;
    @end


.m
#import "ClavierKsViewController.h"

@interface ClavierKsViewController ()

@end

@implementation ClavierKsViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(IBAction)toucheEntreeClavier:(id)sender{
     [self.delegate toucheEnter:sender];
}
@end

现在查看B.h:

#import "ClavierKsViewController.h"
@interface CaisseViewController : UIViewController<ButtonProtocolName>
@property (nonatomic,retain) ClavierKsViewController *clavierKsView;

b.m

- (void)viewDidLoad
{
    [super viewDidLoad];
 clavierKsView = [self.storyboard instantiateViewControllerWithIdentifier:@"clavierKsView"];

    clavierKsView.delegate=self;
}

-(void)toucheEnter:(id)sender{
    NSLog(@"valider");
    }

从这个意义上说它有效 当我从视图B创建委托以基于相同的方式查看A时,我仍然得到相同的消息:找不到委托的协议声明

1 个答案:

答案 0 :(得分:0)

协议无法工作很可能是由循环依赖引起的。解决方案是将您的协议提取到另一个.h,例如&#34; ButtonProtocolName.h&#34;并在a.h和b.h中导入协议