6

int 値を持つ NSNumber オブジェクトを持つ NSArray があります。

arrayOfValues = [[[NSArray alloc] initWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:3], [NSNumber numberWithInt:5], [NSNumber numberWithInt:6], [NSNumber numberWithInt:7], nil] autorelease];
[arrayOfValues retain];

次のように配列を反復処理しようとしています。

int currentValue;
for (int i = 0; i < [arrayOfValues count]; i++)
{
    currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue];
    NSLog(@"currentValue: %@", currentValue); // EXE_BAD_ACCESS
}

ここで何が間違っていますか?

4

2 に答える 2

18

間違った書式指定子を使用しています。%@ はオブジェクト用ですが、int はオブジェクトではありません。したがって、これを行う必要があります:

int currentValue;
for (int i = 0; i < [arrayOfValues count]; i++)
{
    currentValue = [(NSNumber *)[arrayOfValues objectAtIndex:i] intValue];
    NSLog(@"currentValue: %d", currentValue); // EXE_BAD_ACCESS
}

詳細については、ドキュメントを参照してください。

于 2012-08-01T03:54:12.047 に答える
1

これは、呼び出したい列挙値の NSArray を作成するときに機能しました (これは、これがその適切な解決策であることを知るのに役立ちます)。私は Xcode 6.4 を使用しています。

int currentValue = (int)[(NSNumber *)[arrayOfValues objectAtIndex:i] integerValue];

NSIntegerをintにキャストする必要があるため、sosbornの回答は警告をスローします。

ObjC での型キャストは、私の存在の悩みの種です。これが誰かに役立つことを願っています!

于 2015-08-07T16:27:20.320 に答える