我想用 8 个整数初始化一个 NSMutableArray。我在 SO 档案中发现的内容让我觉得很疯狂,但它似乎确实有效:
_noClicks = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithUnsignedInteger:1], [NSNumber numberWithUnsignedInteger:1], [NSNumber numberWithUnsignedInteger:1], [NSNumber numberWithUnsignedInteger:1], [NSNumber numberWithUnsignedInteger:1], [NSNumber numberWithUnsignedInteger:1], [NSNumber numberWithUnsignedInteger:1], [NSNumber numberWithUnsignedInteger:1], [NSNumber numberWithUnsignedInteger:1],nil];
我知道 Objective-c 不是一种面向科学的语言,但必须有更好的方法来做到这一点(我想这是问题 1)。顺便说一下,这段代码在init
名为 GameData 的单例方法中,并与其他数组一起放入字典中。
后来,我使用这个整数数组如下:
- (IBAction)buttonOneWasTouched:(id)sender {
NSUInteger CAP = [[GameData gameData] getCurAnsPos];
NSLog(@"%i", CAP); // CAP is current answer position and this seems to work
NSMutableArray *noClks = [[GameData gameData].curData valueForKey:@"noClicks"];
NSLog(@"%@", noClks); // gives the expected array of 1's
NSLog(@"%@", [noClks class]); // _NSArrayM OK I think
NSUInteger nC = [noClks objectAtIndex:CAP];
NSLog(@"%i", nC); // This gives a crazy answer: 109613120
}
所以这里出了点问题;记录的巨大数字nC
向我表明它已被存储为非无符号整数,但我不明白为什么。所以这是问题#2。
最后,这可能是线索,编译器Incompatible pointer to integer conversion initializing 'NSUInteger' (aka 'unsigned int') with an expression of type 'id';
在第 2 到最后一行给出警告,但奇怪的是,第 1 行具有相同的结构但没有给出错误。这一定是一件非常简单的事情,我最近的所有问题都是。蒂亚!