指定初始化警告从调用的initWithCoder另一个初始化时:
问题描述:
我对继承的代码库工作,并试图解决以下警告:指定初始化警告从调用的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:]
这确实解决了警告,但它也绕过调用必要的功能来正确加载视图。
它工作正常;我只是想减少所有可能的警告,所以我想知道是否可以做出改变来解决这个问题?
答
试试这个:
- (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];
}
部分工作,但我失去的东西像背景颜色和一些其他的造型,任何想法,为什么?我假设超类现在正在设置我不想要的框架元素 – jcad