Как получить упорядоченные значения из неупорядоченного NSDictionary - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь извлечь и отобразить содержимое из таблицы. В настоящее время я выполняю запрос и сохраняю эти идентификатор и имя категории, используя NSMutableDictionary, что прекрасно работает.

Но я сталкиваюсь с одной проблемой, когда я сохраняю содержимое в NSMutableDictionary, порядок изменяется. При поиске этой проблемы кажется, что это поведение по умолчанию NSMutableDictionary.

Я не уверен, что и как использовать, и как использовать для хранения значения пары ключей.

Пожалуйста, посоветуйте мне, как мне решить эту проблему

Спасибо, что заглянули ...

//====================================================================
- ( NSMutableDictionary * ) getDataToDisplayTierOne:(NSString*)dbPath{
//====================================================================

    NSMutableDictionary *aTierOneTemplateData = [[NSMutableDictionary alloc]init];

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    {
        const char *sql_query_stmt = "select * from main_categories";

        sqlite3_stmt *selectstmt;

        if(sqlite3_prepare_v2(database, sql_query_stmt, -1, &selectstmt, NULL) == SQLITE_OK) 
        {           
            while(sqlite3_step(selectstmt) == SQLITE_ROW) 
            {   
                NSString *aValue = [[NSString alloc] initWithUTF8String:
                                    (const char *) sqlite3_column_text(selectstmt, 1)];

                NSString *aId = [[NSString alloc] initWithUTF8String:
                                 (const char *) sqlite3_column_text(selectstmt, 0)];


                [aTierOneTemplateData setObject:aId forKey:aValue];

                [aValue release];
                [aId release];
            }
        }

        sqlite3_finalize(selectstmt);    
    }   
    sqlite3_close(database); 

    return aTierOneTemplateData;

}

Примечание: - Я понимаю ограничения использования nsmutabledictionery так что я жду от вас совета, как мне преодолеть / получить идентификатор, значение другим способом. пожалуйста предложите

Обновлено

Например

яблоко 1 Апельсин 2 Папайя 3

На самом деле я хочу, чтобы этот список отображался на моем uitableview

Apple оранжевый Папайя

При нажатии на каждую ячейку, я хочу, чтобы ее значение идентификатора например, я нажимаю на Orange, теперь я хочу, чтобы это значение идентификатора было 2

Подскажите, пожалуйста, как перебирать массив словарей

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Используйте NSMutableArray вместо NSMutableDictionary.

Измените объявление

NSMutableDictionary *aTierOneTemplateData = [[NSMutableDictionary alloc]init];

на

NSMutableArray *aTierOneTemplateList = [[NSMutableArray alloc]init];

И добавьте объекты в массив,

[aTierOneTemplateList addObject:aId];

И вернуть NSMutableArray,

return aTierOneTemplateList;

Редактировать:

Если вы измените цикл while следующим образом, вы получите массивNSDictionary s с тем же порядком.

NSString *aValue = [[NSString alloc] initWithUTF8String:
                    (const char *) sqlite3_column_text(selectstmt, 1)];

NSString *aId = [[NSString alloc] initWithUTF8String:
                 (const char *) sqlite3_column_text(selectstmt, 0)];

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:aValue,@"value",aId,@"key", nil];
[aTierOneTemplateList addObject:dict];
[dict release];
[aValue release];
[aId release];

Edit2:

Теперь рассмотрим в вашем контроллере таблиц, у вас есть массив NSDictionary s (скажем, * 1030)*).

В методе cellForRowAtIndexPath,

NSDictionary *dict = [aTierOneTemplateList objectAtIndex:indexPath.row];
NSString *key = [dict objectForKey:@"key"];
NSString *value = [dict objectForKey:@"value"];

Аналогично в методе didSelectRowAtIndexPath.

1 голос
/ 22 февраля 2012

Ни NSDictionary, ни NSSet не являются упорядоченными коллекциями. Если вы хотите заказать, используйте NSArray. Если вы хотите наложить порядок, добавьте объекты в неупорядоченные коллекции, которые имеют собственный атрибут индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...