Я пытаюсь узнать, как использовать UITableView в сочетании с задней частью SQLite. Моя проблема в том, что я получил таблицу для заполнения записями из базы данных, однако у меня проблема с названиями разделов. Я не могу найти подходящую настройку для этого, и я повторяю все задания в каждом разделе.iPhone: повторяющиеся строки в каждом разделе группового UITableview
Таблица выглядит так. Поле групп - это то место, где я пытаюсь извлечь название раздела.
TaskID groups TaskName sched lastCompleted nextCompleted success
1 Household laundry 3 03/19/2010 03/22/2010 y
1 Automotive Change oil 3 03/20/2010 03/23/2010 y
В моем методе viewDidLoad я создаю массив из каждого столбца таблицы, как показано ниже.
//Create and initialize arrays from table columns
//______________________________________________________________________________________
ids =[[NSMutableArray alloc] init];
tasks =[[NSMutableArray alloc] init];
sched =[[NSMutableArray alloc] init];
lastComplete =[[NSMutableArray alloc] init];
nextComplete =[[NSMutableArray alloc] init];
weight =[[NSMutableArray alloc] init];
success =[[NSMutableArray alloc] init];
group =[[NSMutableArray alloc] init];
// Bind them to the data
//______________________________________________________________________________________
NSString *query = [NSString stringWithFormat:@"SELECT * FROM Tasks ORDER BY nextComplete "];
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String],
-1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
[ids addObject:[NSString stringWithFormat:@"%i",(int*) sqlite3_column_int(statement, 0)]];
[group addObject:[NSString stringWithFormat:@"%s",(char*) sqlite3_column_text(statement, 1)]];
[tasks addObject:[NSString stringWithFormat:@"%s",(char*) sqlite3_column_text(statement, 2)]];
[sched addObject:[NSString stringWithFormat:@"%i",(int*) sqlite3_column_int(statement, 3)]];
[lastComplete addObject:[NSString stringWithFormat:@"%s",(char*) sqlite3_column_text(statement, 4)]];
[nextComplete addObject:[NSString stringWithFormat:@"%s",(char*) sqlite3_column_text(statement, 5)]];
[success addObject:[NSString stringWithFormat:@"%s",(char*) sqlite3_column_text(statement, 6)]];
[weight addObject:[NSString stringWithFormat:@"%i",(int*) sqlite3_column_int(statement, 7)]];
}
sqlite3_finalize(statement);
}
В методе таблицы: cellForRowAtIndexPath, я создаю элементы управления на лету и установить их свойства текста на объекты в массиве. Ниже приведен пример, я могу предоставить больше, но я уже работаю над книгой здесь ... :)
/create the task label
NSString *tmpMessage;
tmpMessage = [NSString stringWithFormat:@"%@ every %@ days, for %@ points",[tasks objectAtIndex:indexPath.row],[sched objectAtIndex:indexPath.row],[weight objectAtIndex:indexPath.row]];
CGRect schedLabelRect = CGRectMake(0, 0, 250, 15);
UILabel *lblSched = [[UILabel alloc] initWithFrame:schedLabelRect];
lblSched.textAlignment = UITextAlignmentLeft;
lblSched.text = tmpMessage;
lblSched.font = [UIFont boldSystemFontOfSize:10];
[cell.contentView addSubview: lblSched];
[lblSched release];
Мой метод numberOfSectionsInTableView выглядит следующим образом
// Figure out how many sections there are by a distinct count of the groups field
// The groups are entered by user when creating tasks
//______________________________________________________________________________________
NSString *groupquery = [NSString stringWithFormat:@"SELECT COUNT(DISTINCT groups) as Sum FROM Tasks"];
int sum;
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [groupquery UTF8String],
-1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
sum = sqlite3_column_int(statement, 0);
}
sqlite3_finalize(statement);
}
if (sum=0) {
return 1;
}
return 2;
}
Я знаю, что я собираюсь здесь не так но это все, что в моем методе numberOfRowsInSection
return [ids count];
Вы действительно технологический дзен! Я не могу поверить, что после этой работы я по-прежнему вытаскивал костяной ход и смешивал HTML/Markup. Сначала я отправился в основной маршрут данных, но обнаружил, что попытка научиться UITableView и основным данным в то же время была намного больше, чем мог справиться мой мозг размером с горошину! Псевдокод SQl не был проблемой. Я делаю это для дневной работы. Еще раз спасибо! –
При необходимости будет оценена галочка. Это также заставляет других более охотно отвечать на ваши вопросы в будущем. – TechZen
Я был почти там, пытаясь реализовать решение сейчас. Вероятно, неважно, но связь между всеми этими массивами была их выборным порядком. Поэтому, если бы я заполнил эти массивы в виде столбцов, из того же оператора выбора, теоретически, на мой взгляд, их размещение индекса определяло бы их строку.Таким образом, все значения для записи 2 в приведенной выше таблице будут содержать размещение objectAtIndex 2 в каждом массиве и всегда удерживать это место каждый раз, когда приложение запускается или viewDidLoad. –