我是objective-c的新手,我正在尝试创建一个字典数组,以便在具有三列的NSTableView中查看它们。 sqlite DB模式在名为“tbl1”的表中也有三列,“foo”,“bar”和“foobar”。我使用FMDB作为包装器,我可以成功编写和查询。
我可以使用以下方法为整个数据库创建一个数组:
FMResultSet *rs = [db executeQuery:@"select * from tbl1"];
我可以用这个创建一个字典:
dict = [[NSMutableDictionary alloc] init];
[dict setObject: @"baz"
forKey: @"foo"];
阅读数据库中的每个项目:
while ([rs next]) {
NSLog(@"%@, %@, %@",
[rs stringForColumn:@"foo"],
[rs stringForColumn:@"bar"],
[rs stringForColumn:@"foobar"]);
}
然而,我似乎无法创建单个NSMutableDictionaries数组,因此我可以将它们读入基于单元格的表视图中。我能够使用标识符“foo”填充单个列,其值为“foo”,但是,这只是通过从SQL查询中生成“foo”项的数组:
FMResultSet *rs = [db executeQuery:@"select * from tbl1"];
while([foo next]) {
NSString *thisFoo = [foos stringForColumn:@"foo"];
[_foos addObject:[NSString stringWithFormat:@"%@", thisFoo]];
}
NSLog(@"Foos: %@", _foos);
作为附注,如果我想稍后更新数据库,我应该使用可变数组和可变字典?或者无所谓,因为我必须查询整个数据库以刷新表视图? 任何有关如何使用三列sqlite DB填充三列tableview的建议都值得赞赏 - 以及对我对FMDB或tableviews的理解的更正。
答案 0 :(得分:1)
FMResultSet *rs = (FMResultSet*)[db executeQuery:@"select * from tbl1"];
NSMutableArray *totalArray = [[[NSMutableArray alloc]init]autorelease];
while ([rs next]) {
dict = [[NSMutableDictionary alloc] init];
[dict setObject:[rs stringForColumn:@"foo"] forKey:@"COL1"];
[dict setObject:[rs stringForColumn:@"bar"] forKey:@"COL2"];
[dict setObject:[rs stringForColumn:@"foobar"] forKey:@"COL3"];
[totalArray addObject:dict];
[dict release];
}
return totalArray;
应该为您提供字典数组
答案 1 :(得分:0)
对于FMDB,请查看此处给出的示例代码:https://github.com/ccgus/fmdb/zipball/master
在此处阅读Apple的NSTableViewDelegate协议文档:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSTableViewDelegate_Protocol/Reference/Reference.html