3

因此,出于某种原因,以某种方式,我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 时,我会检查是否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. 我不知道为什么。我设置了一个断点,它正在触及那条线......

4

1 回答 1

4

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

这有点令人困惑,但是在另一种语言中,在这种情况下通常会出现 NullPointer 异常,但在目标 C 中,向 nil 发送消息是合法的,因此请注意这些情况......

于 2012-04-08T07:24:13.507 回答