2012-04-08 137 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

相關問題