3

私のアプリにはとがUICollectionViewありUITableViewます。私はナビゲーションにテレビを使用し、詳細なプレゼンテーションに履歴書を使用しています。TVとCVの幅は、ユーザーが変更できます(パンごと、フレキシブルのようにUISplitViewController)。

ユーザーがテレビでアイテムを選択すると、アプリは対応する詳細アイテムでCVを更新します。私が使う

[myCV reloadData];

CVを更新するため。これは、CVが表示されている場合に非常にうまく機能します。

ユーザーは、ナビゲーションTVを最大(全画面幅)にズームできます。そのために、CV幅をゼロに設定しました。CVが表示されていない場合、ユーザーは別のアイテムを選択し(-> cv reloadData)、ユーザーがコンテンツCVを再度開くと、次のエラーが発生します。

キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:「コレクションビューにセクションが1つしかない場合に、セクション2より前のアイテム数をリクエストしてください」

これまでのところ理解できたように、CVは、reloadData中に表示されていない場合(幅がゼロであるか、画面外にあるか、別のビューによって非表示になっているため)、適切に更新されません。CVの幅を0より大きい値に再度設定すると、エラーが発生します。CVは、dataDelegateによって提供される新しいcellItemsではなく、古いcellItemsを処理しているようです。

この状況をどのように修正できるか考えていますか?

4

1 に答える 1

2

回避策で状況を解決しました。

コンテンツ ビューをゼロ幅に設定する前に、そのスーパービューからコンテンツ ビューを削除します。また、コンテンツ ビューの幅を 0 に設定しません。ユーザーがコンテンツ ビューを再度スライドして開き、幅 > 0 を設定する必要がある場合は、ビューをスーパービューに再度追加し、新しい幅をフレームに設定します。 .

あまりエレガントではありませんが、シャルムのように機能します。

于 2013-01-06T17:52:40.407 に答える