指定的初始化程序缺少对超类的指定初始化程序的超级调用

时间:2016-05-25 10:37:09

标签: ios objective-c cocoa

我的代码在这里:

url(r'^user/password/reset/(?P<uidb64>[0-9A-Za-z_\-]+) ......

然后xcode有警告

  

指定的初始值设定项缺少对指定初始值设定项的超级调用   超级班级

当我建造它时。

2 个答案:

答案 0 :(得分:1)

您需要在此方法中添加此行。

self = [super initWithFrame:frame];
if(self) {

}
return self;

来自Apple Doc

指定初始值设定项

  
    

获取完整初始化参数的类的初始化器通常是指定的初始化器。子类的指定初始化程序必须通过向super发送消息来调用其超类的指定初始值设定项。方便(或辅助)初始化程序 - 可以包括init-不要调用super。相反,他们使用下一个参数调用(通过消息自我)系列中的初始化程序,为未传递给它的参数提供默认值。本系列的最终初始化程序是指定的初始化程序。

  

答案 1 :(得分:1)

你应该让你的课有这样的事情:

运行初始化:&gt;

-(instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
        if(!self){
            return nil;
        }

        NSBundle *mainBundle = [NSBundle mainBundle];
        NSArray *views = [mainBundle loadNibNamed:@"LSCouponADView" 
                                            owner:nil 
                                          options:nil];
//above nib name should not be hard coded, it should be like this:
//NSArray *views = [mainBundle loadNibNamed:NSStringFromClass([self class]) 
                                                owner:nil 
                                              options:nil];
        [self addSubview:views[0]];

    return self;
    }

您还应该覆盖xib初始化:

-(id)initWithCoder:(NSCoder *)aDecoder
    {
        self = [super initWithCoder:aDecoder];
        if(!self){
            return nil;
        }

        NSBundle *mainBundle = [NSBundle mainBundle];
        NSArray *views = [mainBundle loadNibNamed:@"LSCouponADView" 
                                                owner:nil 
                                              options:nil];
        [self addSubview:views[0]];

    return self;
    }

总之,你可以制作一个从nib加载的常用方法。