3

この質問が繰り返されている場合は申し訳ありませんが、考えられるすべての解決策を試しましたが、何もうまくいかなかったため、この質問をしています。

アドレス帳データベースからテーブル ビューに 500 近くのレコードを一度に読み込んでいます。レコードが少ない場合、たとえば 50 または 100 の場合、私のテーブルは問題なく表示されます。しかし、レコードの数が 300 以上になると、次のようなクラッシュが発生します。

*** キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。

Build Phaseファイルのチェックインや iOS アプリのパッケージ コンテンツのチェックインなどの解決策がある他のフォームを読みました。私はすべてを試しましたが、ビルド段階でファイルが存在し、アプリファイルのパッケージコンテンツにも追加されます。また、これらのファイルを一度削除しました。つまり、それらを完全に削除し、UITableViewCell の新しいクラスを作成しましたが、それでもクラッシュが発生しました。

GroupmemberCell は、テーブル ビューに追加した xib です。以下は、行データソース メソッドのセルからのコード スニペットです。

static NSString *CellIdentifier = @"セル";
    GroupmemberCell *cell = (GroupmemberCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];;
    もし (セル == ゼロ)
    {

        NSArray *cellxibfilepath = [[NSBundle mainBundle]loadNibNamed:@"GroupmemberCell" owner:self options:nil];

        if (cellxibファイルパス)
        {

        for(cellxibfilepath 内の id cellObjects)
        {
            if ([cellObjects isKindOfClass:[UITableViewCell クラス]])
            {
                セル = (GroupmemberCell*)cellObjects;
            }

        }
        }
    }

ここで問題になる可能性があるのは、同じコードがクラッシュすることなく 100 のレコード セットに対して機能するが、500 以上のレコードのセットを取得してテーブルに表示するとクラッシュすることです。

バックグラウンドで呼び出しを行っていないレコードを取得するために、一度試しましたが、クラッシュも解決されませんでした。

私の考え: 一度に大量のデータを読み込んでいると思いますが、UI 作成のメイン スレッドでほとんど問題が発生していない可能性があります。これは、配列内のデータを取得し、それらをチェックしてから、テーブルをリロードするコマンドを与えるだけだからです。 .

if (tableReloadArray.count!=0) {
             [objtable reloadData];
        }

多くのアプリで 1000 以上のデータを超高速でロードするのを見てきました。彼らのアプローチは何ですか、または私が見逃しているベストプラクティスはありますか?教えてください。

4

1 に答える 1

0

多くのブレインストーミングセッションとコーヒーをたくさん飲んだ後、「分析ツール」を使用してすべてのメモリ警告をクリアし、「インストルメントツール」を使用してリークがあったかどうかを確認しました。派生データを削除し、アプリケーションをクリーンアップして完了です。

「分析ツール」が思いついたアプリケーション全体に約 67 の問題があり、「インストルメント ツール」が表示した 3 ~ 4 個の問題がありました。

これはばかげているように聞こえるかもしれませんが、これを行うことでクラッシュが解決しました。これが同じ問題で立ち往生している人を助けることを願っています.

于 2013-02-28T07:27:08.010 に答える