【问题标题】:Objective-C NSDictionary - Ordering keys and objectsObjective-C NSDictionary - 排序键和对象
【发布时间】:2011-07-16 22:43:20
【问题描述】:
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]];

我需要做的是以特定顺序对具有相应对象的键进行排序,以便在我的表视图中显示,字段在数据库中的顺序不一定是我希望它们显示的方式。例如,我想在我的表格视图中显示类别、参考、标题,然后是年份——所以我应该按照我假设的顺序将它们添加到我的 NSDictionary 中。最好的方法是什么?

【问题讨论】:

  • 只有受虐狂直接在 Objective-C 中使用 SQLite C API。 Use FMDB(SQLite 包装器)或CoreData(对象图管理器)。
  • @DaveDeLong:受虐狂是新的黑人。看看所有玩矮人要塞的人。

标签: objective-c nsmutablearray nsdictionary


【解决方案1】:

NSDictionary 不是这样工作的。字典中键(和值)的顺序是任意的;并且与添加键的顺序完全无关。

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

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

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2011-04-04
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多