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

use*_*695 4 objective-c ios

我之前和代表团合作过.我知道如何创建从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)

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

Mar*_*n R 5

你有一个"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)