2012-01-18 12 views
0

sqliteテーブルのすべての値をセクションで表示する必要があります。この表には100,000行があります。データが表示されるまでほぼ5秒かかりますが、すべて正常に動作しています。私はこれが行の数が多いために発生することを理解しています。したがって、私は10,000行ごとにテーブルビューをリロードすることに決めました。各10の000行について、方法SQLite SELECTとUITableView

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

が呼び出され、正しい値を返すが、cellForRowAtIndexPathは、完全選択(100 000)の端部を除いて呼び出されることはありませんされています。私は現在、メインスレッドでSQLクエリを実行しています。テーブルビューが更新されないのはなぜですか、それとも何か不足していますか?

答えて

0

テーブルをロードする前にデータベースをすべてフェッチしている場合、分割すると何も変更されません。メインスレッドはUIスレッドなので、長いSQLフェッチでブロックすると、テーブルビューの読み込みが遅れることになります。

画面に最大10〜20行を表示できるように100,000行を持つ必要はありません。

numberOfRowsInSectionのカウントをフェッチしてcellForRowAtIndexPath(またはそれ以下)の1000要素をフェッチするだけでなく、できるだけ早く表示する必要があるものを取得し、残りの部分をフェッチするのはなぜでしょうかデータは必要に応じて 人がスクロールしていて、行が1000行あり、その行が行700にスクロールした場合、それは他の1000をフェッチする時間になります。
アプリケーションが何をしているか、それはそれを行う方法かもしれません。

+0

問題はセクションがあることです。あなたはちょうど各セクションの最初のn行を取得することを提案していますよね?ユーザーが文字Aにあり、文字Zをタップしているとしたら、彼はスクロールして文字Yになります。これらのセルのデータはまだ利用できません。 – Adriana

+0

@adriana私は示唆している:あなたが最初に少しの呼吸室を表示する必要があるものを得るだけで、できるだけ早く何かをユーザに提示し、必要に応じて、または一気に残りを取り出すことができます。 –

関連する問題