Subtitle: почему этот код работает? Кажется, это позволяет сравнивать NSNumber
с типами NSString
через какое-то принуждение. Я пытаюсь сравнить выбор из UISegmentedControl
с ранее сохраненным значением.Является ли iOS принуждением NSStrings к NSNumbers?
- (IBAction)minSegmentedControlChanged:(id)sender // MINIMUM value
{
UISegmentedControl *s1 = (UISegmentedControl *)sender;
NSMutableArray *pD = [[GameData gameData].curData valueForKey:@"persData"];
// Must make sure max >= min
NSNumber *currMax = [pD objectAtIndex:1];
NSLog(@"%@", [currMax class]); // __NSCFString ?!
int ss1 = s1.selectedSegmentIndex;
NSNumber *SS1 = [NSNumber numberWithInt:ss1 + 2];
if (SS1 >= currMax) SS1 = currMax;
NSLog(@"%@", SS1); // Answer is correct, appears to be an integer
NSLog(@"%@", [SS1 class]); // __NSCFString ?!
[pD replaceObjectAtIndex:0
withObject:SS1];
[[GameData gameData].curData setObject:pD
forKey:@"persData"];
NSLog(@"%@", [[GameData gameData].curData valueForKey:@"persData"]);
}
Я особенно с просьбой о:
NSNumber *currMax = [pD objectAtIndex:1];
NSLog(@"%@", [currMax class]); // __NSCFString ?!
который, кажется, возвращает строку для номера. [[GameData gameData].curData valueForKey:@"persData"];
инициализируется следующим образом:
_persData = [[NSMutableArray alloc] initWithObjects:@"2", @"8", @"TWL", @"0", @"0", nil];
, который представляет собой строку в элементе 1. Так почему я могу попросить его для NSNumber
, который сообщает, что это на самом деле __NSCFString
, на котором я могу делать арифметические сравнения на? Я был на объективе-с в течение нескольких месяцев, но это кажется странным.
Вам потребовалось несколько месяцев, чтобы понять, что цель-c была странной? :) – Nate
С одной стороны - '% @' печатает строку, а не целое число. Мне было бы интересно посмотреть, как вы укажете, какие вы укажете, если вы скажете им печатать как целые числа, используя '% i'. – WendiKidd
Пришел из 'R', так что это было странно в течение долгого времени. Когда вы думаете, что знаете, что-то подобное происходит. Если, конечно, это не «очевидно». –