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

时间:2014-06-18 21:19:24

标签: ios

我最近选择了iOS开发。

我是新手,所以请原谅我的无知。

我在我的应用程序中遇到了一个问题,当我启动一个流(如流媒体直播音频)时,应用程序崩溃(ipod touch 5th gen运行iOS 7.1)。

我收到此错误:

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

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

谢谢!

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;
    }

}

2 个答案:

答案 0 :(得分:4)

调试时,我强烈建议您添加2个特殊断点:
一个例外。
并且一个用于所有“BAD_ACCESS”错误。

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

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

  • 打开断点左侧标签,然后点击左下角的“+”按钮。
  • 选择添加例外断点。
  • 右键单击新断点,然后按以下方式配置:

    • 例外:全部
    • 休息:抛出
    • 操作:添加操作
    • 选项:取消选中该框。
  • 然后添加符号断点(“+”按钮 - >添加符号断点)

  • 以这种方式配置断点:
    • 符号:malloc_error_break
    • 不要修改所有其他选项

你已经完成了开始调试!

答案 1 :(得分:1)

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