我最近选择了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;
}
}
答案 0 :(得分:4)
调试时,我强烈建议您添加2个特殊断点:
一个例外。
并且一个用于所有“BAD_ACCESS”错误。
当启用这两个断点时,xcode将自动在断层线上断开而不是直接崩溃而不提供更多信息。
要激活它们,请按以下步骤操作:
右键单击新断点,然后按以下方式配置:
然后添加符号断点(“+”按钮 - >添加符号断点)
你已经完成了开始调试!
答案 1 :(得分:1)
所以你要对索引进行硬编码以寻找characterAtIndex:6。 如果传入的参数“title”更短(比如说只有4个字符),或者它是一个分成2的unicode字符(比如ä分成a和¨),“ch”可能是未定义的并且“超出范围”。或许可以考虑按字符和方式循环“标题”。看它是否在给定的unicode字符范围内,而不是硬编码索引&检查整个字母串。