我之前和代表团合作过.我知道如何创建从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
Run Code Online (Sandbox Code Playgroud)
subview.m:
[self.delegate someMethod:data];
Run Code Online (Sandbox Code Playgroud)
SuperView.h
#import <UIKit/UIKit.h>
#import "SubViewController.h"
@interface SuperViewController : UIViewController <SubViewControllerDelegate>
@end
Run Code Online (Sandbox Code Playgroud)
SuperView.m:
#pragma mark - SubView Controller Delegate Methods
- (void)someMethod:(NSData *)data{
NSLog(@"%@", data);
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么或错过了什么?
你有一个"import-cycle",因为"SuperViewController.h"导入"SubViewController.h",反之亦然.
删除#import "SuperViewController.h""SubViewController.h"应解决问题.
如果您确实需要在"SubViewController.h"中声明该类,请使用
@class SuperViewController;以避免导入循环.
备注:本<SubViewControllerDelegate>很可能不需要在协议中声明公共接口"SuperViewController.h"可言.
在"SuperViewController.h"中,将类声明为
@interface SuperViewController : UIViewController
Run Code Online (Sandbox Code Playgroud)
在"SuperViewController.m"中,使用协议定义类扩展:
@interface SuperViewController () <SubViewControllerDelegate>
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1249 次 |
| 最近记录: |