0

私はテキストフィールドにいくつかのテキストを持っています。それらは6文字で始まり、私自身の入力も6文字の長さです。このコードを使用して比較のために部分を取得します:

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

これを行うとシミュレーターが一時停止しますが、6,7,8,9,10,11 を 0,1,2,3,4,5 にすると動作します。どうして?

( *キャッチされない例外 'NSRangeException' によるアプリの終了、理由: '-[__NSCFString characterAtIndex:]: 範囲またはインデックスが範囲外') 誰かが私に説明してくれますか?

4

2 に答える 2

2

開始値と入力の両方を連結した12文字の文字列があると言っていますか?そうではないのではないかと強く思います。

デバッガーを使用して、質問の最初の行を中断しpo [mainTextController text]、デバッグコンソールに移動します。文字列が期待したほど長くないことがわかります。

于 2012-05-17T23:26:34.237 に答える
0

mainTextController.textのテキスト文字列の範囲外の文字にアクセスしようとしています

その文字にアクセスする前に、文字列の長さを確認する必要があります。

if([mainTextController.text length] > 12)
{
    unichar aChar6 = [mainTextController.text characterAtIndex:11];
}
于 2012-05-17T23:25:04.237 に答える