Objective-C NSDictionary - Упорядочение ключей и объектов - PullRequest
0 голосов
/ 17 июля 2011
const char *sql = [[[NSString alloc] initWithFormat:@"Select * from table1 where id = '%@' limit 1",str] UTF8String];

if(sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) != SQLITE_OK)
    NSAssert1(0, @"Error while creating detail view statement. '%s'", sqlite3_errmsg(database));

NSMutableArray *keys = [NSMutableArray array];
NSMutableArray *objects = [NSMutableArray array];
NSString *keyText = [NSString alloc];

while(sqlite3_step(detailStmt) == SQLITE_ROW) {

    for (int x=1; x<=74;x++)
    {

        switch (x) {
            case 1:
                keyText = @"Title";
                break;
            case 2:
                keyText = @"Year";
                break;
            case 3:
                keyText = @"Reference";
                break;
            case 4:
                keyText = @"Category";
                break;
            default:
                break;
        }


        if([[NSString stringWithUTF8String:(char *)sqlite3_column_text(detailStmt, x)] isEqualToString:@""]){
            //Don't add empty fields to the array
        } else { 

        [objects addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(detailStmt, x)]];  

        [keys addObject:keyText];


        }
    }
 }

appDelegate.itemList = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

sqlite3_reset(detailStmt);

Приведенный выше код получает некоторую информацию из базы данных SQLite, есть 74 поля информации, затем я добавляю ключи (имя поля) в массив 'keys', а содержимое поля - в массив 'objects' , Затем я добавляю ключи и объекты в NSDictionary, затем я могу просмотреть это в виде таблицы следующим образом:

NSArray* allKeys = [appDelegate.itemList allKeys];

cell.titleLbl.text = [allKeys objectAtIndex:indexPath.row];
cell.descLbl.text = [appDelegate.itemList objectForKey:[allKeys objectAtIndex:indexPath.row]];

Мне нужно упорядочить ключи с соответствующими объектами в определенном порядке для отображения в моем табличном представлении, порядок, в котором поля находятся в базе данных, не обязательно должен отображаться так, как я бы хотел, чтобы они отображались. Например, я хочу показать Category, Reference, Title, затем Year в моем табличном представлении - поэтому я должен добавить их в мой NSDictionary в том порядке, который я предполагаю. Как лучше всего это сделать?

1 Ответ

1 голос
/ 17 июля 2011

Это не так, как NSDictionary работает. Порядок ключей (и значений) в словаре произвольный; и вовсе не относится к порядку добавления ключей.

Правильный способ сделать это - прикрепить соответствующую информацию для поиска значения к NSTableColumn с и использовать эту информацию для поиска, когда табличное представление загружает свои данные.

Выполнение этого правильно автоматически приводит к переупорядочению столбцов в интерфейсе и т. Д.

...