Obj-, переменная экземпляра, используемая, когда 'self' не установлено на результат '[(super или self) init ...]' - PullRequest
5 голосов
/ 11 ноября 2011

Я уже задавал подобный вопрос к этому, но я все еще не вижу проблемы?

-(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...]'

Ответы [ 2 ]

4 голосов
/ 11 ноября 2011

То, что вы пытаетесь сделать, технически нормально, но на каком-то этапе вам нужно вызвать [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];

    ...
2 голосов
/ 11 ноября 2011

Предупреждение означает, что оно говорит.Вы назначаете что-то для decimalSymbol, который является переменной экземпляра, но в этот момент нет экземпляра .Вам нужно

self = [super init];

В начале вашего метода инициализации.В какой-то момент объект должен быть создан, в какой-то момент он должен перезвонить NSObject (через цепочку суперинитов).

...