object-c - iOS 開発で reloadData を正しく使用して tableView または collectionView を更新する方法
我想大声告诉你
我想大声告诉你 2017-05-02 09:22:52
0
1
668

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

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

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

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

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

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

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

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

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

我想大声告诉你
我想大声告诉你

全員に返信(1)
迷茫

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート