Objective-C NSDictionary - 订购密钥和对象

时间:2011-07-16 22:43:20

标签: objective-c nsmutablearray nsdictionary

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 个答案:

答案 0 :(得分:1)

这不是NSDictionary的工作方式。字典中键(和值)的顺序是任意的;并且根本不与添加键的顺序相关。

执行此操作的正确方法是附加相关信息以查找NSTableColumn的值,并在tableview加载其数据时使用该信息查找。

正确地自动执行此操作会导致在界面中重新排序的列工作等。