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中。怎样才能解决这个问题?
答案 0 :(得分:1)
这不是NSDictionary
的工作方式。字典中键(和值)的顺序是任意的;并且根本不与添加键的顺序相关。
执行此操作的正确方法是附加相关信息以查找NSTableColumn
的值,并在tableview加载其数据时使用该信息查找。
正确地自动执行此操作会导致在界面中重新排序的列工作等。