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 に進む場合は、そうであるかどうかを確認し、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です。理由がわかりません。ブレークポイントを設定すると、その行にヒットしています...

4

1 に答える 1

4

の値self.queryもnilであるため、nilを取得する可能性があります。したがって、nilオブジェクトに値を設定すると、nilが取得されます...

少し紛らわしいですが、別の言語では通常、このような状況でNullPointer例外が発生しますが、Objective Cではnilにメッセージを送信することが合法であるため、これらの状況に注意してください...

于 2012-04-08T07:24:13.507 に答える