如何创建从子级到父级的委派(subview-superview)

时间:2013-07-12 07:34:16

标签: ios objective-c

我之前和代表团合作过。我知道如何创建从superview到子视图类的委托。但是,我试图用相反的方式使用相同的方法,但它不起作用!委托只是为了单向工作,还是有办法/技巧将它用作类之间的双向沟通​​?我在父/ superview .h类中收到错误,该错误是:

  

无法找到“SubViewControllerDelegate”

的协议定义

我的代码是这样的: subview.h

#import <UIKit/UIKit.h>

#import "SuperViewController.h"

@protocol SubViewControllerDelegate <NSObject>

    - (void)someMethod:(NSData *)data;

@end

@interface SubViewController : UIViewController 

@property (weak, nonatomic) id <SubViewControllerDelegate> delegate;

@end

subview.m:

[self.delegate someMethod:data]; 

SuperView.h

#import <UIKit/UIKit.h>

#import "SubViewController.h"

@interface SuperViewController : UIViewController <SubViewControllerDelegate>

@end

SuperView.m:

#pragma mark - SubView Controller Delegate Methods
- (void)someMethod:(NSData *)data{
    NSLog(@"%@", data);
}

我做错了什么或错过了什么?

1 个答案:

答案 0 :(得分:5)

你有一个“import-cycle”,因为“SuperViewController.h”导入“SubViewController.h”,反之亦然。

删除“SubViewController.h”中的#import "SuperViewController.h" 应该解决问题。

如果您确实需要在“SubViewController.h”中声明该类,请使用  @class SuperViewController;以避免导入周期。

备注: <SubViewControllerDelegate>协议声明可能不是 在 public 界面“SuperViewController.h”中根本需要。

在“SuperViewController.h”中,将类声明为

@interface SuperViewController : UIViewController

在“SuperViewController.m”中,使用协议定义类扩展

@interface SuperViewController () <SubViewControllerDelegate>
@end