字幕:なぜこのコードが機能するのですか?ある種の強制によってタイプNSNumber
との比較が可能になるようです。からの選択を以前に保存された値とNSString
比較しようとしています。UISegmentedControl
- (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
算術比較を実行できる上にあることを報告します。私はObjective-Cに数か月しかいませんが、これは奇妙に思えます。