Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从子类访问超类的委托_Ios_Objective C_Inheritance_Delegates - Fatal编程技术网

Ios 从子类访问超类的委托

Ios 从子类访问超类的委托,ios,objective-c,inheritance,delegates,Ios,Objective C,Inheritance,Delegates,我有四个类MainVC,ParentClient和ChildClient1,ChildClient2(它们是ParentClient的子类)。ParentClient具有对MainVC的委托,因此在MainVC中 - (void)viewDidLoad { [super viewDidLoad]; [ParentClient instance].mainViewDelegate = self; } 然后ParentClient看起来像这样 @interface Base

我有四个类MainVCParentClientChildClient1ChildClient2(它们是ParentClient的子类)。ParentClient具有对MainVC的委托,因此在MainVC中

- (void)viewDidLoad
{
      [super viewDidLoad];
      [ParentClient instance].mainViewDelegate = self;
}
然后ParentClient看起来像这样

@interface BaseClient : NSObject

@property (assign) id<MainVCInteraction> mainViewDelegate;
+(instancetype) instance;

@end
- (void)viewDidLoad
{
      [super viewDidLoad];
      [ChildClient1 instance].mainViewDelegate = self;
      [ChildClient2 instance].mainViewDelegate = self;
}
@接口基本客户端:NSObject
@属性(分配)id mainViewDelegate;
+(instancetype)实例;
@结束

现在我想从ChildClient1,ChildClient2访问
mainViewDelegate
,它返回我nil,而
[ParentClient instance]。mainViewDelegate

返回正确的值。下面是我所做的,我删除了BaseClient类,以便ChildClient1,ChildClient2不再是BaseClient的子类。我定义了一个objective-c协议文件MainVCInteaction.h,并使Client1、Client2如下所示:

#import "MainVCInteraction.h"
@interface ChildClient1 : NSObject

@property (assign) id<MainVCInteraction> mainViewDelegate;
+(instancetype) instance;

@end


#import "MainVCInteraction.h"
@interface ChildClient2 : NSObject

@property (assign) id<MainVCInteraction> mainViewDelegate;
+(instancetype) instance;

@end

这位伟人自己说:“我不知道Objective-C的具体情况,但一般来说,单例类应该防止子类化。”它们是两个实例,您应该分别分配它们的
mainViewDelegate
<代码>[ParentClient实例].mainViewDelegate=self不能影响ParentClient及其子类的所有实例。