2012-03-06 9 views
3

のswitch文と配列を使用してエラー「ステートメントは、整数型の式を必要とする」、それは右のスイッチで「文は、整数型の式を( 『ID』は無効)が必要です」私を与えますステートメント。どうしましたか?配列で作業しようとすると、文字列

NSArray count = [NSArray arrayWithObjects: @"1", @"2", @"3", @"4", @"5", @"6", @"7", nil];  

switch ([count objectAtIndex: myIndex]) { 
    case 1: 
     NSLog(@"One"); 
     break; 
    case 2: 
     NSLog(@"Two"); 
     break; 
    case 3: 
     NSLog(@"Three"); 
     break; 
    default: 
     break; 
} 
+6

私はあなたが基本的なプログラミングの知識...私のアドバイスが欠けていると思うが、ゼロから開始し、週にすべてを学ぶことを試みてはいけません。また、チュートリアルを使用して学習したり、本を手に入れたり、クラスに行くことはできません(可能な場合)。 – EmilioPelaez

答えて

9

switch文は、整数型で動作します。あなたの配列にはNSStringのオブジェクトが含まれています。あなたはこのような整数に配列から取得NSString変換:

NSArray count = [NSArray arrayWithObjects: @"1", @"2", @"3", @"4", @"5", @"6", @"7", nil]; 

NSString *obj = [count objectAtIndex: myIndex]; 
switch ([obj intValue]) { 
    case 1: 
     NSLog(@"One"); 
     break; 
    case 2: 
     NSLog(@"Two"); 
     break; 
    case 3: 
     NSLog(@"Three"); 
     break; 
    default: 
     break; 
} 
+0

私はこれも好きです – QED

+0

NSNumbersを配列に保存しないのはなぜですか?数値を文字列として格納するのは少し壊れやすいです... – bryanmac

+0

@bryanmacそれはもっと意味があります...しかしNSNumberはまだオブジェクトなので、switch文で使う整数値を引き出す必要があります。 – highlycaffeinated

2

リテラルNSStringの配列を作成し、intのcase文を作成しています。積分型のみをオンにすることができます。

問題はarrayWithObjectsが、オブジェクト(id)を切り替えることができないNSObject派生オブジェクトの配列を作成することです。

数値の配列を格納したい場合は、数字であることを望む文字列を格納する脆弱性に頼るのではなく、NSNumberオブジェクトを格納するオプションがあります。これは動作します:

NSArray *arr = [NSArray arrayWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], nil]; 

switch ([[arr objectAtIndex:1] intValue]) { 
    case 1: 
     NSLog(@"1"); 
     break; 

    case 2: 
     NSLog(@"2"); 
     break; 

    default: 
     break; 
} 

それは出力:

2012-03-05 23:23:46.798 Craplet[82357:707] 2 
+0

別の問題は、Array内の - (void)viewDidLoadメソッドを開始したが、別のメソッドからアクセスできないということです。どのようにしてグローバル配列(一般的なグローバル変数)を作成しますか? – NoobDev4iPhone

+0

シングルトンパターンをチェックアウトします。 – bryanmac

+0

http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like – bryanmac

1

[count objectAtIndex:]があなたの特定のケースでNSStringのだろうID(別名オブジェクト)を返し、いずれの場合には、そのないint型というあなたのケースを表現が期待されています。 [[count objectAtIndex:myIndex] intValue]は、NSStringを整数に変換する必要があります。

1

あなたの配列オブジェクトはintではなくNSStringsです。ここであなたが達成しようとしている大きな写真は何ですか?

あなた可能性:

NSString *str = [count objectAtIndex:myIndex]; 
if ([str isEqualToString:@"1"]) NSLog(@"One"); 
else if ... // etc 

いっそのこと:

static NSString *one = @"1"; 
static NSString *two = @"2"; 
// etc 

NSArray *count = [NSArray arrayWithObjects:one, two, ... nil]; 

NSString *str = [count objectAtIndex:myIndex]; 

if (str == one) NSLog(@"One"); // this works because now 'str' and 'one' are the same object 
else if ... // etc 
関連する問題