2012-05-17 56 views
0

我有一个文本框一些文字后,便开始用6个字符,和我自己的输入也是6个字符长,我用这个代码,让他们比较的部分:charachterAtIndex最大范围?

unichar aChar1 = [mainTextController.text characterAtIndex:6]; 
    unichar aChar2 = [mainTextController.text characterAtIndex:7]; 
    unichar aChar3 = [mainTextController.text characterAtIndex:8]; 
    unichar aChar4 = [mainTextController.text characterAtIndex:9]; 
    unichar aChar5 = [mainTextController.text characterAtIndex:10]; 
    unichar aChar6 = [mainTextController.text characterAtIndex:11]; 

现在,当我做到这一点暂停我的模拟器,但当我在0,1,2,3,4,5转6,7,8,9,10,11,5然后它的工作。怎么来的?

*终止应用程序由于未捕获的异常 'NSRangeException',原因是: ' - [__ NSCFString characterAtIndex:]:范围或索引越界')有人可以解释给我

回答

2

是哟你说你有一个12个字符的字符串,包含起始值和输入,并列在一起?我强烈怀疑事实并非如此。

使用调试器,打破问题的第一行,并在调试控制台中转至po [mainTextController text]。你会发现这个字符串没有你期望的那么长。

+0

大你们两个真的让我想想,让我增添了些许的延迟,所以我想确保我自己输入字符那里当时我的代码试图让他们分隔符,它的工作!感谢我做到了:dispatch_after(dispatch_time(DISPATCH_TIME_NOW,0.1 * NSEC_PER_SEC), dispatch_get_current_queue(),^ { – Kevin

+0

我不明白你为什么需要延迟?你在回应什么事件? –

0

您正在尝试访问一个字符,出mainTextController.text

文本字符串的范围

你应该访问这个角色之前检查字符串的长度:

if([mainTextController.text length] > 12) 
{ 
    unichar aChar6 = [mainTextController.text characterAtIndex:11]; 
} 
+0

伟大的你两个真的让我想到了,所以我添加了一点延迟,所以我会确保我自己的输入字符,那里当时我的代码试图让他们分离,它的工作!感谢我做到了:dispatch_after(dispatch_time(DISPATCH_TIME_NOW,0.1 * NSEC_PER_SEC), dispatch_get_current_queue()^ { – Kevin

相关问题