我已经问了一个类似的问题,但我仍然看不出问题?
-(id)initWithKeyPadType: (int)value
{
[self setKeyPadType:value];
self = [self init];
if( self != nil )
{
//self.intKeyPadType = value;
}
return self;
}
- (id)init {
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init]
autorelease];
decimalSymbol = [formatter decimalSeparator];
....
警告来自Instance variable used while 'self' is not set to the result of '[(super or self) init...]'
答案 0 :(得分:4)
您要做的是技术上没问题,但在某个阶段您需要调用[super init]
。如果您的班级的init
方法执行了许多其他initWith...
方法使用的常见初始化,那么请将[super init]
放在那里。此外,在尝试使用实例变量之前,请始终确保该类已init
'。
- (id) initWithKeyPadType: (int)value
{
self = [self init]; // invoke common initialisation
if( self != nil )
{
[self setKeyPadType:value];
}
return self;
}
- (id) init
{
self = [super init]; // invoke NSObject initialisation (or whoever superclass is)
if (!self) return nil;
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init]
autorelease];
decimalSymbol = [formatter decimalSeparator];
...
答案 1 :(得分:2)
警告意味着它的内容。您正在为decimalSymbol
分配一些内容,这是一个实例变量,但此时没有实例。你需要一个
self = [super init];
在init方法的开头。在某些时候必须创建对象,在某些时候这必须回调NSObject(通过一系列超级内容)。