4

我以前与代表团合作过。我知道如何创建从超级视图到子视图类的委托。但是,我正在尝试使用相同的方法以相反的方式进行操作,但它不起作用!委派是否意味着仅以一种方式工作,还是有一种方法/技巧可以将其用作类之间的双向通信?我在 parent/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

子视图.m:

[self.delegate someMethod:data]; 

超级视图.h

#import <UIKit/UIKit.h>

#import "SubViewController.h"

@interface SuperViewController : UIViewController <SubViewControllerDelegate>

@end

超级视图.m:

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

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

4

1 回答 1

5

您有一个“导入周期”,因为“SuperViewController.h”导入“SubViewController.h”,反之亦然。

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

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

备注:公共接口“ SuperViewController.h”中<SubViewControllerDelegate>可能根本不需要协议声明。

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

@interface SuperViewController : UIViewController

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

@interface SuperViewController () <SubViewControllerDelegate>
@end
于 2013-07-12T07:56:36.857 回答