我有一个要求,我在NSDictionary中存储了5个密钥,对应于我存储了来自不同数组的5个值。我的数据结构如下:
字典是{
1 = (
{
SubRegionName = "abc";
WalkId = 123;
WalkName = xyz;
},
{
},....
2 = (
{
SubRegionName = "abc";
WalkId = 123;
WalkName = xyz;
},
{
},....
3 = (
{
SubRegionName = "abc;
WalkId = 123;
WalkName = xyz;
},
{
},....
4 = (
{
SubRegionName = "abc";
WalkId = 123;
WalkName = xyz;
},
{
},....
5 = (
{
SubRegionName = "abc";
WalkId = 123;
WalkName = xyz;
},
{
},
)
我从sqlite获得的上述数据根据一些Id说tempId(1,2,3,4,5),我想单独使用它们。因为我必须在tableview中将walkName显示为cell.textlabel.text和SubregionName作为cell.detailtext.text。
我没有得到如何从字典中访问这些数据。任何人都可以建议我正确的方法。
我的代码是:
// 对于数据库查询(从数据库获取数据) ** * ** * ** * **
-(void)getMainRegions
{
sqlite3 *walkNameDB;
if (sqlite3_open([[self databasePath] UTF8String], &walkNameDB) != SQLITE_OK) {
sqlite3_close(walkNameDB);
NSAssert(0, @"Failed to open Walk name database");
}
NSString *regionQuery = @"SELECT Rid,RName from MainRegions";
sqlite3_stmt *teststatement = nil;
// NSLog(@"%d",sqlite3_prepare_v2(walkNameDB,[regionQuery UTF8String], -1, &teststatement, nil));
if (sqlite3_prepare_v2(walkNameDB,[regionQuery UTF8String], -1, &teststatement, nil) == SQLITE_OK)
{
RNameArray = [[NSMutableArray alloc] init];
RIdArray = [[NSMutableArray alloc] init];
while( sqlite3_step(teststatement) == SQLITE_ROW )
{
NSNumber *RId;
int temp1 = (int)sqlite3_column_int(teststatement, 0);
RId = [[NSNumber alloc] initWithInt:temp1];
char *RNameCharacter;
RNameCharacter = (char *) sqlite3_column_text(teststatement, 1);
NSString *RNameString = [[NSString alloc] initWithUTF8String:RNameCharacter];
[RNameArray addObject:RNameString];
[RIdArray addObject:RId];
}
}
[self getWalks];
}
-(void)getWalks
{
sqlite3 *walkNameDB;
if (sqlite3_open([[self databasePath] UTF8String], &walkNameDB) != SQLITE_OK) {
sqlite3_close(walkNameDB);
NSAssert(0, @"Failed to open Walk name database");
}
RegionWalksDictionary = [[NSMutableDictionary alloc] init];
for(regionId in RIdArray)
{
regionWalkArray = [[NSMutableArray alloc] init];
NSString *walkQuery = [[NSString alloc] initWithFormat:@"SELECT Wid,WName,SName from Walks,SubRegions WHERE Walks.Sid=SubRegions.Sid AND Rid = %d",[regionId integerValue] ];
sqlite3_stmt *walkstatement = nil;
// NSLog(@"%d",sqlite3_prepare_v2(walkNameDB,[walkQuery UTF8String], -1, &walkstatement, nil));
if (sqlite3_prepare_v2(walkNameDB,[walkQuery UTF8String], -1, &walkstatement, nil) == SQLITE_OK)
{
while( sqlite3_step(walkstatement) == SQLITE_ROW )
{
NSNumber *WId;
int temp1 = (int)sqlite3_column_int(walkstatement, 0);
WId = [[NSNumber alloc] initWithInt:temp1];
char *WNameCharacter;
WNameCharacter = (char *) sqlite3_column_text(walkstatement, 1);
NSString *WNameString = [[NSString alloc] initWithUTF8String:WNameCharacter];
char *SNameCharacter;
SNameCharacter = (char *) sqlite3_column_text(walkstatement, 2);
NSString *SNameString = [[NSString alloc] initWithUTF8String:SNameCharacter];
NSMutableDictionary *tempWalk = [[NSMutableDictionary alloc] init];
[tempWalk setObject:WId forKey:@"WalkId"];
[tempWalk setObject:WNameString forKey:@"WalkName"];
[tempWalk setObject:SNameString forKey:@"SubRegionName"];
[regionWalkArray addObject:tempWalk];
}
}
[RegionWalksDictionary setObject:regionWalkArray forKey:regionId];
// NSLog(@"arr%@",RegionWalksDictionary);
}
}
// * ** 从数据库获取数据的方法在此结束 * ** * ** * ** * ****
答案 0 :(得分:0)
您的5个密钥似乎有一个NSDictionary
,而您内部有一个NSArray
,其中一个元素是NSDictionary
。虽然我可能错了,试试这个:
NSDictionary *dictionaryForKey1 = [[myDictionary objectForKey:@"1"] objectAtIndex:0];
然后你可以使用它:
NSString *walkName = [dictionaryForKey1 objectForKey:@"WalkName"];
答案 1 :(得分:0)
试试这个
NSString * walkName = [[parentDic objectForKey:[NSString stringWithFormat:@"%d",indexPath.row]] objectForKey:@"WalkName"];
NSString * SubregionName = [[parentDic objectForKey:[NSString stringWithFormat:@"%d",indexPath.row]] objectForKey:@"SubRegionName"];
答案 2 :(得分:0)
试试这种方式......
for(id dict in RegionWalksDictionary){
NSLog(@"WalkId: %@",[[[RegionWalksDictionary objectForKey:dict]objectAtIndex:0]objectForKey:@"WalkId"] );
NSLog(@"WalkName: %@",[[[RegionWalksDictionary objectForKey:dict]objectAtIndex:0]objectForKey:@"WalkName"] );
NSLog(@"SubRegionName: %@",[[[RegionWalksDictionary objectForKey:dict]objectAtIndex:0]objectForKey:@"SubRegionName"] );
NSLog(@"----");
}
我使用如下(如果这不是结构或数据则注释)
NSMutableDictionary *RegionWalksDictionary=[NSMutableDictionary new];
NSMutableArray *regionWalkArray=[NSMutableArray new];
NSMutableDictionary *tempWalk=[NSMutableDictionary new];
[tempWalk setObject:@"wk1" forKey:@"WalkId"];
[tempWalk setObject:@"wkName1" forKey:@"WalkName"];
[tempWalk setObject:@"srName1" forKey:@"SubRegionName"];
[regionWalkArray addObject:tempWalk];
[RegionWalksDictionary setObject:regionWalkArray forKey:@"1"];
[RegionWalksDictionary setObject:regionWalkArray forKey:@"2"];
[RegionWalksDictionary setObject:regionWalkArray forKey:@"3"];
NSLog(@"tempWalkd dict is %@",RegionWalksDictionary);
答案 3 :(得分:0)
AH!现在我看到了 - 有5个长度为1的数组
NSArray *array1 = dict[@"1];
NSDictionary *details = array1[0];
//print each var
id WalkName = details[@"WalkName"];