我想用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)。顺便说一下,这个代码在一个名为GameData的单例的init
方法中,并放在一个包含其他数组的字典中。
稍后,我使用这个整数数组如下:
- (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。
最后,这可能是线索,编译器在第2行到最后一行给出了警告Incompatible pointer to integer conversion initializing 'NSUInteger' (aka 'unsigned int') with an expression of type 'id';
,但奇怪的是,第1行具有相同的结构,但没有给出错误。这一定是非常简单的事情,我最近的所有问题都是如此。 TIA!
答案 0 :(得分:1)
对于第一个问题,我建议像
_noClicks = [[NSMutableArray alloc] initWithCapacity:n];
for(int i=0;i<n;i++)
[_noClicks addObject:[NSNumber numberWithInt:1]];
如方法名称所示,objectAtIndex
返回一个对象,而不是NSUInteger
。您可以执行类似
NSNumber *nC = [noClks objectAtIndex:CAP];
或
NSUInteger nC = [[noClks objectAtIndex:CAP] intValue];