私はUITableviewデリゲートとデータソースプロトコルメソッドを操作する方法を知っています。だから、私はセクションで作業することができます。今私は、データベースからすべてのレコードをフェッチするために、単一のクエリを使用したいと思います。firstname、firstname ascで連絡先の注文からlastnameを選択します。 (今私は26個の個別のクエリを使用していますが、これは適切な解決策ではないことが分かります)UITableview名前のセクションがソートされた順
ここでセクションのアルファベットに基づいて連絡先をグループ化したいと思います。文字Sから始まる連絡先がない場合、Sのセクションは表示されません。私に正しいコードやチュートリアルを教えてください。ありがとう
このスクリプトを修正することはできますか?
- (void)read_data_fromDB { objectsForCharacters = [[NSMutableDictionary alloc] init];
sqlite3 *db = [eikardAppDelegate getNewDBConnection];
arr_sectionTitles = [[NSMutableArray alloc] init];
for(char c='A';c<='Z';c++)
{
NSMutableString *query = nil;
query = [NSMutableString stringWithFormat:@"select first_name, middle_name, last_name from phonebook where first_name like '%c%%';",c];
const char *sql = [query UTF8String];
sqlite3_stmt *selectAllStmt = nil;
if(sqlite3_prepare_v2(db,sql, -1, &selectAllStmt, NULL)!= SQLITE_OK)
NSAssert1(0,@"error preparing statement",sqlite3_errmsg(db));
else
{
NSMutableArray *arr_persons = [[NSMutableArray alloc] init];
while(sqlite3_step(selectAllStmt)==SQLITE_ROW)
{
//NSLog(@"Firstname : %@",query);
PersonInfo *person =[[PersonInfo alloc] init];
char *chrstr =(char *)sqlite3_column_text(selectAllStmt, 0);
if(chrstr !=NULL)
{
person.str_firstName = [NSString stringWithUTF8String:chrstr];
NSLog(@"Firstname : %@",person.str_firstName);
}
chrstr =(char *)sqlite3_column_text(selectAllStmt, 1);
if(chrstr !=NULL)
{
person.str_middleName = [NSString stringWithUTF8String:chrstr];
NSLog(@"Middlename : %@",[NSString stringWithUTF8String:chrstr]);
}
chrstr =(char *)sqlite3_column_text(selectAllStmt, 2);
if(chrstr !=NULL)
{
person.str_lastName = [NSString stringWithUTF8String:chrstr];
NSLog(@"Lastname : %@",person.str_lastName);
}
[arr_persons addObject:person];
[person release];
}
if([arr_persons count]>0)
{
NSString *keyValue = [NSString stringWithFormat:@"%c",c];
[objectsForCharacters setObject:arr_persons forKey:keyValue];
[arr_sectionTitles addObject:keyValue];
}
//[arr_persons release];
}
sqlite3_finalize(selectAllStmt);
}
sqlite3_close(db); }
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [arr_sectionTitles count];
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSString *secTitle = [arr_sectionTitles objectAtIndex:section];
return [[objectsForCharacters objectForKey:secTitle] count];
}
NSPredicatorを試してみましたか? –
私はどのようにsqliteクエリでNSPredicateを使用するか考えていません。私にサンプルを提供してもらえますか? – dinesh
すべてのデータfron sqliteを取得することができます。その後、配列を取得した後、NSPredicateを実行する必要があります。 –