私は、sqliteデータベースからデータをロードしている主アプリケーションデリゲートにオブジェクトの配列を作成しました。 TableViewを読み込むと、このクラスのプロパティはオブジェクトの配列を指すように設定されます。次に、TableViewが表示されると、行数に対する配列のカウントが正しく返され、配列内の適切なオブジェクトのプロパティからセル内のテキストが表示されます。objective-cテーブルビューが再読み込み時にクラッシュする
ナビゲーションバーの右上には、ネットワークからXMLファイルをダウンロードして解析し、データベースを更新する更新ボタンもあります。
データベースからオブジェクトのメイン配列を再作成し、自分のTableViewプロパティを新しい配列にポイントしてから、TableViewにデータを再読み込みするよう依頼します。これがEXC_BAD_ACCESSでクラッシュする場所です。
私はデバッガをステップ実行し、reloadData
コールまですべてが正しいことを確認しました。データベースとメイン配列は両方とも同期され、カスタムTableViewプロパティもメイン配列を指しています。
次に、私がデバッガをステップ実行するとき、私はいくつか気がついた。まず、numberOfRowsInSection
を呼び出すと、メイン配列へのポインタが正しく、行数が正しいことになります。第2に、最初のcellForRowAtIndexPath
呼び出しに到達すると、メイン配列へのポインタが無効なメモリセクションを指しています。実際のメモリアドレスは同じですが、オブジェクトの配列は消えています。
リファレンスカウントがゼロより大きくなければならないので、このようなリロードの途中で配列がどのように消えているのか理解できません。ガベージコレクションは不要です。だから私の質問は、何が起こっているかも知りません。第2に、問題の正確な位置をどのように判断するのですか?
私は配列がリリースされていると仮定していることを指摘しておきます。デバッガは配列の値をオブジェクトの実際の数ではなく '{(int)[$ VAR count]} objects'として表示します。 – richard