2012-02-07 14 views
0
//=================================================================================== 
- (NSMutableDictionary *) getDataToDisplayTierTwo:(NSString*)dbPath:(NSString*)iD{ 
//=================================================================================== 
    NSMutableDictionary *aTierTwoTemplateData = [[NSMutableDictionary alloc]init]; 

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    { 

     NSString *selectSQL = [NSString stringWithFormat: @"select * from sub_categories_reference scr inner join storyboard_sub_categories ssc on ssc.id = scr.sub_category_id inner join subcategory_order as sco on sco.sub_category_id = scr.sub_category_id where scr.main_category_id = %@ and sco.main_category_id = %@ order by sco.position asc",iD,iD]; 

     NSLog(@"%@", selectSQL); 

     const char *sql_query_stmt = [selectSQL UTF8String]; 

     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, 6)]; 

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


       [aTierTwoTemplateData setObject:aId forKey:aValue]; 

       [aValue release]; 
       [aId release]; 

       NSLog(@"%@ %@ ^^^^^^^^^^^^^^^^^^^^picker value id ", aValue, aId); 

      } 
     } 
    } 
    sqlite3_close(database); 


    return aTierTwoTemplateData; 
} 

これを配列に割り当てると結果セットを得ることができますが、これは辞書に格納されている順序が失われます。クエリを使用して注文に基づいて結果セットを一覧表示する方法

実際には、位置フィールドに基づいて結果セットを保存しました。

結果セットを配列に割り当てると、順序が変更されます。

どうすればこのような状況に対処できますか教えてください。

これは私が「位置」としてデシベルでcoulmnを持っているとして、あなたはキーと値のペアとしてデータを保存し、秩序を維持したい場合は、あなたがNSArrayの組み合わせを使用することができ、

+0

NSDictionaryはキーをソートするため、データを正確な順序にする場合は、NSArray/NSMutableArrayを使用してデータを格納し、順序を維持してください。 –

答えて

0

重複せず、 NSDictionary
同じコードは次のようになります。


//=================================================================================== 
- (NSArray *) getDataToDisplayTierTwo:(NSString*)dbPath:(NSString*)iD{ 
//=================================================================================== 
    NSMutableArray *aTierTwoTemplateData = [[NSMutableArray alloc]init]; 

    if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
    { 

     NSString *selectSQL = [NSString stringWithFormat: @"select * from sub_categories_reference scr inner join storyboard_sub_categories ssc on ssc.id = scr.sub_category_id inner join subcategory_order as sco on sco.sub_category_id = scr.sub_category_id where scr.main_category_id = %@ and sco.main_category_id = %@ order by sco.position asc",iD,iD]; 

     NSLog(@"%@", selectSQL); 

     const char *sql_query_stmt = [selectSQL UTF8String]; 

     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, 6)]; 

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



       [aTierTwoTemplateData addObject:[NSDictionary dictionaryWithObject:aId forKey:aValue]]; 

       [aValue release]; 
       [aId release]; 

       NSLog(@"%@ %@ ^^^^^^^^^^^^^^^^^^^^picker value id ", aValue, aId); 

      } 
     } 
    } 
    sqlite3_close(database); 

    return [aTierTwoTemplateData autorelease]; 
} 

あなたは自分の価値観が辞書に保存され、データの順序も保持されます辞書の配列を有することになりますこのように。

関連する問題