1

我有一个包含两个空白字符的数组,如下所示:

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 回答