2012-04-08 85 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,我请检查activityLevel是否为nil,如果是,则将其设置为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

0123问题:1)你使用ARC和2)查询不是零? – 2012-04-08 07:22:55

+0

我使用ARC和是的,它似乎是查询是零。但是,如果用户选择一行,它不是零。 – Jon 2012-04-08 07:23:51

回答

4

也许你会得到零,因为self.query的价值也为零,所以你设置为零对象的值,你会得到零...

这有点令人困惑,但在另一种语言中,通常会在这种情况下得到NullPointer例外,但在客观的C中,发送消息为零以便在这些情况下保持注意是合法的...

+0

是的,你是对的 – Jon 2012-04-08 07:26:08

+0

我知道这有点令人困惑,因为在另一种语言中,通常你会得到一个NullPointerException,但是在目标C中,发送消息到nil是合法的,所以请注意这些情况。 .. – aleroot 2012-04-08 07:29:03

相关问题