为什么我的NSNumber总是零?

时间:2012-04-08 07:19:36

标签: iphone objective-c cocoa-touch

所以出于某种原因,在某种方法中,我的NSNumber总是nil而且它让我疯狂。

如果用户在我的选择器中选择了一行,则会调用它并且工作正常:

- (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。我不知道为什么。我设置了一个断点,它正在击中那条线......

1 个答案:

答案 0 :(得分:4)

也许你得到的是因为self.query的值也是零,所以你在nil对象上设置一个值,你就得零...

这有点令人困惑但是在另一种语言中你通常会在这种情况下得到NullPointer异常,在目标C中,将消息发送给nil是合法的,所以要注意这些情况...