我有两列NSTableView,我想从SQLite数据库填充它们。
此方法是查询表
-(void)getPersons
{
NSString *file = [[NSBundle mainBundle] pathForResource:@"persons" ofType:@"db"];
sqlite3 *database = NULL;
if (sqlite3_open([file UTF8String], &database)==SQLITE_OK)
{
NSLog(@"i open database");
sqlite3_exec(database, "select name,age from persons", MyCallback, persons, NULL);
}
sqlite3_close(database);
}
问题出现在MyCallback方法中:
static int MyCallback(void *context, int count, char **values, char **columns)
{
NSMutableArray *persons = (NSMutableArray *)context;
for (int i=0; i < count; i++) {
NSString *columnname = [NSString stringWithUTF8String:columns[i]];
const char *nameCString = values[i];
if ([columnname isEqualTo:@"name"]) {
[persons addObject:[NSString stringWithUTF8String:nameCString]];
}
else {
[ages addObject:[NSString stringWithUTF8String:nameCString]];
}
}
return SQLITE_OK;
}
如果我可以为一个NSMutableArray分配*上下文,我如何将“年龄”条目写入NSMutableArray *年龄? (在此代码中,这是NSMutableArray * person)
当然,我应该为获取年龄条目创建一个单独的方法吗?
感谢。
答案 0 :(得分:1)
在许多简单的情况中,就像你的问题中那样,在objective-c:dictionaries数组中使用表的最自然表示是很方便的。表是索引的记录集合 - 因此它是一个数组,每个记录都是键值对的集合 - 所以它是一个字典。当您更改列名称甚至列数时,您无需更改代码。
...
NSMutableArray *allRecords= (NSMutableArray *)context;
NSString *columnName;
NSString *columnValue;
NSMutableDictionary * record = [NSMutableDictionary dictionary];
for (int i=0; i < count; i++) {
columnName = [NSString stringWithUTF8String:columns[i]];
if (values[i]){
columnValue = [NSString stringWithUTF8String:values[i]];
}
else{
columnValue = @"";
}
[record setObject:columnValue forKey:columnName];
}
[allRecords addObject:record];
...