2012-02-22 65 views
-1

我想從表中獲取和顯示內容。目前我正在運行一個查詢並存儲這些ID和類別名稱使用NSMutableDictionary它工作正常。如何從一個無序的NSDictionary獲取有序的值

但我面臨一個問題,當我將內容存儲到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 ,所以我期待你的建議我該如何克服/獲取ID, 值以其他方式。請建議

更新

例如

蘋果1 橙2 木瓜3

其實我想,名單在我的UITableView顯示它

蘋果 橙色 木瓜

攻絲時在每個單元上,我想要它的id值爲 例如,我點擊橙色,現在我想有值id作爲2

你能告訴我如何遍歷dictionery

回答

1

使用NSMutableArray而不是NSMutableDictionary

更改聲明

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

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

而且下流添加到陣列,

[aTierOneTemplateList addObject:aId]; 

並返回NSMutableArray裏,

return aTierOneTemplateList; 

編輯:

如果修改while循環,如下所示,你將獲得與同階的NSDictionary列數組。

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:

在tableviewcontroller現在想想,你有NSDictionary S(比如aTierOneTemplateList)陣列。

cellForRowAtIndexPath方法,

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

同樣在didSelectRowAtIndexPath方法。

+0

感謝您的答覆。通過使用您的代碼,我只能得到ids而不是id和它的值..所以我怎麼處理這個...請讓我知道 – user198725878 2012-02-22 06:31:11

+0

我已經更新了我的答案 – Ilanchezhian 2012-02-22 06:40:22

+0

嗨Adhira:請看我更新的問題(你能告訴我如何遍歷nsmutabledictionery陣列) – user198725878 2012-02-22 06:58:04

1

無論NSDictionary的,也不是NSSet中有序集合的陣列。如果你想訂購,使用NSArray。如果要強制排序,請將對象添加到具有其自己的索引屬性的無序集合。

+0

請用代碼找到我更新的問題。我明白使用nsdictionery.pls的限制讓我知道你的幫助 – user198725878 2012-02-22 06:12:56