-5

鉴于这本词典:

"vals":[
{
"ID":"1",
"NAME":"Jack"
},
{
"ID":"2",
"NAME":"Jason"
},
{
"ID":"3",
"NAME":"Sheryl"
},
{
"ID":"4",
"NAME":"Clark"
},
{
"ID":"5",
"NAME":"Markus"
}]

我正在使用pickerView的方法:

NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

那么,给定 NSInteger row,我如何获得该 ID 的名称?

4

2 回答 2

3

非常基本的方法:

for (NSDictionary *idDictionary in [root objectForKey:@"vals"])
{
    NSInteger idValue = [[idDictionary objectForKey:@"ID"] integerValue];
    if (idValue == row)
        return [idDictionary objectForKey:@"NAME"]
}

尽管您可能应该记得 pickerView 行从 0 开始,所以您需要考虑到这一点

编辑:您应该在循环之后添加一个 return nil 或 @"" 以捕获该项目丢失的情况。但正如 xlc0212 上面指出的那样,不同的数据结构会更好。我的建议是有一本像这样的字典:

NSDictionary *myDict = @{@"vals" : @[@"Jack", @"Jason", @"Sheryl", @"Clark", @"Markus"]};
NSString *value = [[myDict objectForKey:@"vals"] objectAtIndex:row];
于 2013-01-23T08:50:02.470 回答
0

作为vals字典数组,您可以从数组中选择一行:

NSArray *values = [dict objectForKey:@"vals"];
NSDictionary *value = [values objectAtIndex:row];
return (NSString *) [value objectForKey:@"NAME"];

row与 ID 不匹配,因为您的 ID 从 1 开始,row值从 0 开始。如果由于某些原因需要 ID,我宁愿建议在选择选择器行时获取它:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    self.myID = [[[self.myData objectForKey:@"vals"] objectAtIndex:row] objectForKey:@"ID"]
}

无论如何,如果您的 ID 总是只是像 1,2,3,4,5... 这样的索引(没有像 1,2,5,10 这样的孔),那么您的 ID 是相等的row+1,您不需要搜索它。

于 2013-01-23T08:53:19.737 回答