-2

テーブルビューの使用経験があります。今回は、配列からロードしようとしました(技術的には辞書からですが、allKeysパラメーターはNSArrayです)が、この例外が発生します

-[__NSArrayI objectAtIndex:]: index 10 beyond bounds [0 .. 9]

現在、私の配列は 11 キーの長さです。つまり、10 としてカウントされます (Obj-C も 0 をカウントするため)。ここでは、カウントが 9 であると表示されています。いくつかの異なる方法を試しました。

  • 辞書の初期化を- (void)awakeFromNib
  • NSArrayすべてのキーを使用してセパレートを作成する
  • ちょうどリスト11

しかし、それらはすべて私に例外を与えます!

アップデート

私の配列の長さは 10 個のオブジェクトしかないという人がいることに気付きましたが、これを に設定すると10、1 つのオブジェクトが欠落します。

ご覧のとおり、キーは 11 個あります。

ブレークポイントは 11 を示しています...

ここに画像の説明を入力

アイテムを10個使うと「加速X」アイテムがないよね?

ここに画像の説明を入力

行数を返すのと同じ方法で、10とNSLogは別の言い方をします。

4

1 に答える 1

1

実際のところ、配列の長さは 10 項目です。上記のコメントは、「10 アイテムの長さにするには "Acceleration X" を削除する必要がある」と言っているのではなく、「配列が 11 アイテムの長さであるという考えが間違っている」と言っています。

これ以上のコードを見ないと、ここで実際に何が起こっているのかを判断するのは困難です。ただし-allValues、その配列の順序は定義されていないため、使用しないでください。これにより、テーブルビューをバッキングするのに適していません。

代わりに、表示したい順序でディクショナリのキーの配列を保持し、_items[key]直接参照する必要があります。

例えば:

_keys = 
@[
    @"Red",
    @"Orange",
    @"Yellow",
    @"Green",
    @"Blue",
    @"Indigo",
    @"Violet"
];

_dictionary = 
@{
    @"Blue": @"Battle",
    @"Green": @"Gave",
    @"Indigo": @"In",
    @"Orange": @"Of",
    @"Red": @"Richard",
    @"Violet": @"Vain"
    @"Yellow": @"York",
};

- (NSString *)labelTextForIndexPath:(NSIndexPath *)indexPath
{
    return _keys[indexPath.row];
}

- (NSString *)detailLabelTextForIndexPath:(NSIndexPath *)indexPath
{
    return _dictionary[_keys[indexPath.row]];
}
于 2013-10-14T08:05:37.913 に答える