検索

ホームページ  >  に質問  >  本文

object-c - iOS 開発で reloadData を正しく使用して tableView または collectionView を更新する方法

最近、以前書いた iOS アプリケーションが更新時に時々クラッシュすることに突然気づきました。
コードをチェックしたところ、バグが見つかりました。バグの原因となる手順は次のとおりです:

  1. ユーザーはテーブルビューをプルダウンして更新します。

  2. データを保持する NSArray をクリアします。

  3. ネットワーク データを取得し、それを NSArray に入力します。

通常の状況では、これを行うことに問題はありません。
ただし、ステップ 2 と 3 の実行中にユーザーがテーブルビューをドラッグすると、テーブルビューはすぐにクラッシュします。

その理由を分析しました。 NSArray をクリアすると、tableView は自動的にnumberOfItemsInSection を呼び出して最新のデータ数を取得しません。この時点でテーブルビューは cellForItemAtIndexPath を呼び出して新しいセルを取得します。は 0、cellForItemAtIndexPath アクセス データは配列の範囲外になります。

そこで、3 番目のステップの途中に挿入された 2 番目のステップについて説明したいと思います。つまり、リモート データを取得した後、NSArray をクリアし、新しいネットワーク データに置き換えて、reloadData のリフレッシュを調整します。

しかし、これには元のバグがまだ残っています。reloadData を呼び出す前、NSArray の数は tableView によって取得されるnumberOfItemsInSection とは異なります。ただ、以前より間隔が短くなりました。

tableView でデータをどのように更新するかを専門家に聞いてもいいですか。 100%の安全性を達成する方法。

我想大声告诉你我想大声告诉你2823日前685

全員に返信(1)返信します

  • 迷茫

    迷茫2017-05-02 09:24:52

    データが変更されている限り、tableViewを更新する必要があります
    コンテンツをクリアした場合でも、完了したら更新できます

    返事
    0
  • キャンセル返事