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 だと思います)。ちなみにこのコードは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行目は同じ構造ですがエラーは発生しません. これはとてつもなく単純なことに違いありません。私の最近の質問はすべてそうでした。ティア!