2012-04-08 2 views
3

Так почему-то, по определенному методу, мой NSNumber всегда nil и его вождение меня гайками.Почему мой NSNumber всегда равен нулю?

Если пользователь выбирает строку в моей палитре, это вызывается и она отлично работает:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    self.query.activityLevel = [NSNumber numberWithInt:[[[self.activityArray objectAtIndex:row]objectForKey:@"key"]intValue]]; 
} 

Однако, когда пользователь не выбирает строку, а просто переходит к следующему VC, я проверьте, есть ли activityLevelnil и установите его на 1, если это так.

- (void)donePressed { 
    if (!self.query.activityLevel) { 
     self.query.activityLevel = [NSNumber numberWithInt:2]; 
    } 
    NSNumber *calories = [Calculations numberOfCaloriesNeededForQuery:self.query]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Проблема заключается в том, когда пользователь не выбирает строку и она попадает self.query.activityLevel = [NSNumber numberWithInt:2];, если я печатаю объект, он по-прежнему nil. Понятия не имею почему. Я поставил точку останова и бьет, что линия ...

+0

2 вопросы: 1) используете ли вы ARC и 2) это запрос не нуль? –

+0

Я использую ARC и да, похоже, что запрос равен нулю. Однако, если пользователь выбирает строку, это не ноль. – Jon

ответ

4

Может быть, вы получаете ноль, потому что значение self.query также ноль, так что вы устанавливаете значение на ноль объекта и вы получите ноль ...

Это немного запутывает, но, хотя на другом языке вы обычно получаете исключение NullPointer в таких ситуациях, в объекте C законно отправлять сообщение в ноль, поэтому обратите внимание на эти ситуации ...

+0

Да, вы правы – Jon

+0

Я знаю, что это немного запутанно, потому что на другом языке обычно вы получите исключение NullPointerException, но в объективном C законно отправлять сообщение в nil, поэтому обратите внимание на подобные случаи. .. – aleroot

Смежные вопросы