2017-04-21 81 views
1

我对继承的代码库工作,并试图解决以下警告:指定初始化警告从调用的initWithCoder另一个初始化时:

指定初始化应该只调用上“超级”

一个指定初始化指定的初始化缺少一个“超级”调用父类的指定初始化

的代码是:

- (id)initWithCoder:(NSCoder *)aDecoder { 
    self = [self initWithFrame:[CDCUtility getScreenBounds]]; //switching to super breaks 
    if (self) { 
    } 
    return self; 
} 

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setArray:[NSMutableArray new]]; 
     [self setButtonArray:[NSMutableArray new]]; 
     _graphicEQ = [[CDCEffectsGraphicEQ alloc] initWithFrame:CGRectMake((1024/2) - (811/2), 60, 860, 255)]; 
     [self addSubview:_graphicEQ]; 
     [_graphicEQ setDelegate:self]; 
     [self addBypassButtonToView]; 
     [self addFlatButtonToView]; 
     [self addScrollView]; 
    } 
    return self; 
} 

所以从我可以做出来的开发商推翻超initWithCoder:(这是一个UIView),允许自定义UI,以使用自定义参数创建视图被加载,并在此initWithFrame:参数传递。

我看到有人说'在initWithCoder:[super initWithFrame:]这确实解决了警告,但它也绕过调用必要的功能来正确加载视图。

它工作正常;我只是想减少所有可能的警告,所以我想知道是否可以做出改变来解决这个问题?

回答

1

试试这个:

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

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self designatedInitializer]; 
    } 
    return self; 
} 

- (void) designatedInitializer { 
    [self setArray:[NSMutableArray new]]; 
    [self setButtonArray:[NSMutableArray new]]; 
    _graphicEQ = [[CDCEffectsGraphicEQ alloc] initWithFrame:CGRectMake((1024/2) - (811/2), 60, 860, 255)]; 
    [self addSubview:_graphicEQ]; 
    [_graphicEQ setDelegate:self]; 
    [self addBypassButtonToView]; 
    [self addFlatButtonToView]; 
    [self addScrollView]; 
} 
+0

部分工作,但我失去的东西像背景颜色和一些其他的造型,任何想法,为什么?我假设超类现在正在设置我不想要的框架元素 – jcad