5プロトタイプのセルとVoiceOverの問題

Voiceoverがオンのときにプロトタイプのセルを読み込もうとすると問題が発生します。アプリがクラッシュし、エラーが発生する

Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:]

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

これはVoiceOverがオンの場合にのみ発生し、そうでない場合はアプリが正常に動作します。どんな助け?

6
iOS 6.0.1でVoiceOverを有効にしたときにも同じ問題があり、かなり怒っています。
追加された 著者 avocade,
他の誰かがこの問題に問題がある場合は、この問題についてAppleにバグを提出しました。
追加された 著者 Paul Sylliboy,
@ChristianBeerはあなたのバグをOpen Radarで発見し、それを破棄しました。 (rdar:// 10763569)ありがとう。
追加された 著者 edelaney05,
これは本当に吸う、誰も回避策を見つける?
追加された 著者 nickbona,
私は同じ問題を抱えています!私は今日、アクセシビリティのヒントやものを私のアプリケーションに追加し始めました。それは本当に吸う。レーダーIDをここに追加して、私がバグを複製できるようにしてください。私はまだ5.1ベータ2でそのバグを取得します!
追加された 著者 Christian Beer,

1 答え

私は偶然この権利を得ているかどうかは分かりませんが、これは私にとってはうまくいっています。 UITableViewDataSource

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    [...]

    UITableViewCell *standardCell;
    if (UIAccessibilityIsVoiceOverRunning()) {
        standardCell = [tableView dequeueReusableCellWithIdentifier:@"VO Cell"];
    } else {
        standardCell = [tableView dequeueReusableCellWithIdentifier:@"Regular Cell"];
    }

    //Configure the cell
    [...]

    return standardCell;

}

パフォーマンス上の理由からVoiceOverがオフになっていると、iOSがアクセシビリティプロパティなしでCellをキャッシュするケースがあります。そのため、使用する既定の識別子は、これらのプロパティを持たないキャッシュされたセルに関連している可能性があります。 VoiceOverがオンになっていて、iOSがこれらのセルをデキューしようとすると、そこにプロパティが見つからず、ブレークしません。異なる識別子を持つことで、VOがオンのときにiOSに新しいセルをキャッシュさせるように強制します。

繰り返しますが、これは私が作っている前提ですが、このようにしてCellをデキューするとこの問題は発生しません。しかし、私が言及したようにそれらをデキューする場合、あなたはエラーが発生することに気を付ける必要があります:

If you are dequeuing Cells whose Identifiers are set in a .xib file or in a Storyboard, like in the image below, you would then have to set another Prototype Cell with the VO Reuse Identifier. Reuse Identifier set in Interface Builder

0
追加された