1

アプリのデータを保持するために SQLite を使用しようとしています。このデータベースには何千ものレコードが含まれる可能性があるため、起動時にそれらすべてを配列にロードすることはおそらく良い考えではありません。そのため、id ごとに cellForForAtIndexPath に個別にロードします。これはうまくいきますが、並べ替えることができません...誰かもっと良い方法を考えられますか? 私はそれが本当に簡単だと確信しています:L

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"VerbCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    VerbData *verb = [[VerbData alloc] init];
    if(isFiltered)
        verb = [searchResults objectAtIndex:indexPath.row];
    else
    {
        const char *sql = [[NSString stringWithFormat: @"SELECT infinitive, english FROM verbs WHERE id=%d", indexPath.row+1] UTF8String];
        sqlite3_stmt *sqlStatement;
        if(sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK){
            NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db));
        }else{
            while (sqlite3_step(sqlStatement) == SQLITE_ROW) {
                verb.infinitive = [NSString stringWithUTF8String:(char *)sqlite3_column_text(sqlStatement,0)];
                verb.english = [NSString stringWithUTF8String:(char *)sqlite3_column_text(sqlStatement,1)];
            }
        }
    }

    cell.textLabel.text = verb.infinitive;
    cell.detailTextLabel.text = verb.english;

    return cell;
}

ありがとう(:

4

2 に答える 2

1

SQLクエリに「ORDER BY yourField」を追加する必要があります

于 2012-09-28T23:16:58.237 に答える
0

オフセットとリミットを使用して順番に選択できます

SQL Server の行オフセット

ORDER BY [ ASCENDING | ASCENDING | DESCENDING ] すべての並べ替えジョブは DBMS によって行われます。これは、リモート データベースがある場合にモバイルに適しているため、サーバー側がすべてのハードワークを行います。使用することもできます

SELECT ... FROM ... ORDER BY ...オフセット制限

ここで: offset - データベースの先頭からのオフセットです limit - クエリによって収集されるデータ行の最大量です

その後、テーブルをチャンクでロードできます。その他のトリックは、テーブルがスクロールするときに非同期で行をクエリすることです。つまり、最初の 100 行をロードしますが、ユーザーが 70 行未満の場合、別のクエリが非同期で作成され、データソース配列にデータが追加されます。

于 2012-09-28T23:48:39.843 に答える