0

NSMutableArray を 8 つの整数で初期化したいと考えています。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 だと思います)。ちなみにこのコードはinitGameData というシングルトンのメソッド内にあり、他の配列と一緒にディクショナリに入れています。

後で、この整数の配列を次のように使用します。

- (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 に答える