0

我想用 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 行具有相同的结构但没有给出错误。这一定是一件非常简单的事情,我最近的所有问题都是。蒂亚!

4

1 回答 1

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];
于 2012-04-04T00:59:15.187 回答