iOS错误终止应用程序由于未捕获的exception'NSRangeException范围或索引超出界限'

我最近拿起做iOS开发。

我对整件事情都很陌生,所以请原谅我的无知。

我遇到了一个问题,在我的应用程序中,当我开始一个stream(如stream媒体现场audio),应用程序崩溃(iPod touch第五代运行iOS 7.1)。

我得到这个错误:

Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFConstantString characterAtIndex:]: Range or index out of bounds'. 

有人可以帮助我诊断这个问题和可能的解决scheme吗?

谢谢!!

ironmantis7x

编辑:这是完整的错误信息:

 2014-06-18 13:18:39.181 miraathradios[845:60b] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFConstantString characterAtIndex:]: Range or index out of bounds' *** First throw call stack: (0x2f6f0fd3 0x39e3bccf 0x2f6f0f15 0x2f6364f7 0x63c65 0x63b35 0x60a8b 0x300d9c73 0x2f6bc25b 0x2f6bb72b 0x2f6b9f1f 0x2f624f0f 0x2f624cf3 0x34546663 0x31f7016d 0x588a9 0x587f8) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb) 

部分代码:

 - (JHTickerDirection)detecteDirection:(NSString *) title{ //NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; NSCharacterSet *letters = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"]; unichar ch = [title characterAtIndex:6]; if ([letters characterIsMember:ch]) { return JHTickerDirectionLTR; }else{ return JHTickerDirectionRTL; } } 

所以你要对索引进行硬编码来查找characterAtIndex:6.如果传入的参数“title”更短(比如说只有4个字符),或者它可能是一个unicode字符分割为2(比如分割为a和¨),“ch”可能是不确定的,“超出范围”。 也许考虑循环“标题”的字符和看它是否在一个给定范围内的Unicode字符,而不是硬编码索引和检查整个字母串。

在debugging时,我强烈build议你添加2个特殊的断点:
一个例外。
还有一个适用于所有“BAD_ACCESS”错误。

当启用这两个断点时,xcode将自动断开错误行而不是直接崩溃而不提供更多信息。

要激活它们,请按照下列步骤操作:

  • 打开左边的断点,然后点击左下angular的“+”button。
  • select添加exception断点。
  • 右键单击新的断点,然后按以下方式进行configuration:

    • 例外:全部
    • rest:扔
    • 行动:添加行动
    • 选项:不选中框。
  • 然后添加一个符号断点(“+”button – >添加符号断点)

  • 这样configuration断点:
    • 符号:malloc_error_break
    • 不要修改所有其他选项

你已经完成了开始debugging!