发现在iOS中实现继承的难度

时间:2014-04-10 04:41:48

标签: ios objective-c inheritance

我有3个UIView类 1)通用:UIView
2)IPhoneView:Generic
3)IPadView:Generic。

在Generic类中我设置目标如下:

  //Generic.h class
  @interface Generic : UIView
  {
    id  mTarget;
  }

 -(void)setDelegate:(id)inDelegate;


//Generic.m class
@implementation Generic
-(void)setDelegate:(id)inDelegate
{
     mTarget=inDelegate;
} 
@end

此方法从控制器调用 -

//My IPhoneView.h
 #import "Generic.h"

 @interface IPhoneView : Generic

 {

 }
 -(void)initializeUIElements;


    //My IPhoneView.m

    @implementation IPhoneView

    - (id)initWithFrame:(CGRect)frame
    {
       self = [super initWithFrame:frame];
       if (self) {
      // Initialization code
       NSLog(@"mTarget value : %@",mTarget);
       }
      return self;
    }

IPadView也是同样的行为。

然后IPhone和IPad类继承自Generic类。但是我无法在IPhoneView和IPadView类中获得mTarget值。我做错了什么?帮帮我!!

4 个答案:

答案 0 :(得分:0)

首先,您需要在 IPad IPhone 类中创建通用类的对象 然后你可以通过

访问它
objectOfGenericClass.mTarget

在您的情况下可能会有所帮助:

答案 1 :(得分:0)

您需要通过将mTarget属性放在Generic的头文件中来公开它。子类现在将“知道”他们拥有此属性。

答案 2 :(得分:0)

我认为你应该改变:

  @interface LoginView : UIView

使用:

  @interface LoginView : IPhone

修改

你的继承顺序应该是这样的:

GenericView<-IPhoneView<-LoginView

因此,我认为您可以访问mTarget中的LoginView

答案 3 :(得分:0)

如您所述,您会收到一个空目标。我想你可能会覆盖子类中的setter方法吗?

无论哪种方式,以下为我工作,请检查Generic-subclasses的setter方法,并确保调用“super-setter”

@implementation iPhone
-(void)setDelegate:(id)inDelegate
{
    NSLog(@"My former mTarget: %@",mTarget);
    [super setDelegate:inDelegate];
    NSLog(@"My new mTarget: %@",mTarget);
}

@end