1

次のように2つの空白文字を含む配列があります。

shuffleArray = [[NSMutableArray alloc] initWithObjects:@"H",@"E",@"",@"",@"O", nil];

次に、配列の値をunicharに割り当てて、次のようにさらにコーディングします。

for(int i=0; i<[shuffleArray count]; i++)
{
       NSString *temp = [shuffleArray objectAtIndex:i];
        NSLog(@"string:%@",temp);
        unichar c = [temp characterAtIndex:0];
}

「H」と「E」は正常に出力されますが、空白文字、つまり@""が見つかった場合。

その時点でクラッシュします

unichar c = [temp characterAtIndex:0];

どうすればこの問題を解決できますか。

どんな助けでも適用できます。

よろしくお願いします。

4

3 に答える 3

2

characterAtIndexから:参照:

討論

インデックスがレシーバーの終わりを超えている場合、NSRangeExceptionを発生させます。

したがって、文字列にアクセスする前に、文字列が空でないかどうかを確認する必要があります

NSString *temp = [shuffleArray objectAtIndex:i];
NSLog(@"string:%@",temp);
unichar c = someInitialValue; // to indicate later that the string was empty may be equal 0 ?
if ([temp length] > 0) [temp characterAtIndex:0];

ループ条件も最後の反復と同様に間違っています(iが[shuffleArray count]に等しい場合)同じNSRangeException例外が発生します

于 2012-05-15T12:27:54.413 に答える
1

これを試してみてください

  for( NSString *temp in shuffleArray )
  {
    NSLog(@"string:%@",temp);
    if (temp.length) {
      unichar c = [temp characterAtIndex:0];
    }
  }
于 2012-05-15T12:25:47.237 に答える
1

このコードには2つの間違いがあります:

NSMutableArray *shuffleArray = [[NSMutableArray alloc] initWithObjects:@"H",@"E",@"",@"",@"O", nil];

for(int i=0; i < [shuffleArray count]; i++) // < and not <=
{
    NSString *temp = [shuffleArray objectAtIndex:i];
    NSLog(@"string:%@",temp);
    if ([temp length] > 0)
    {
        unichar c = [temp characterAtIndex:0]; // Check if you can acces to the element before
        NSLog(@"%c", c);
    }
}
于 2012-05-15T12:30:14.727 に答える