2013-01-23 28 views
-6

鉴于本字典:使用的NSDictionary

"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的名称?

+0

这实际上不是一个字典数组? –

+1

@nickfalk它的字典,其唯一元素是字典数组 – wattson12

+3

为什么不只是使用id作为键和名称作为值? –

回答

3

非常基本的方法:

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

虽然你应该记住,pickerView行从0开始,所以你需要考虑到这一点

编辑:你应该添加一个返回零或@” “在循环后捕捉物品丢失的情况。但正如xlc0212指出的那样,不同的数据结构会更好。我的建议是有一个像字典:

NSDictionary *myDict = @{@"vals" : @[@"Jack", @"Jason", @"Sheryl", @"Clark", @"Markus"]}; 
NSString *value = [[myDict objectForKey:@"vals"] objectAtIndex:row]; 
+0

+1,我试过的你也一样 –

+0

右边跟着你的for循环,他可以添加'return @“;'确保一个空字符串(不是零,但是选择器可以处理的东西)在事件中返回,没有对应于行的ID。当然,它应该是'for(idValue - 1 = row)',相对于第一行为零。 –

+0

@HermannKlecker正确。这是非常基本的,没有错误检查,并且绝对不会为字典现在设置时的第一个值给出值 – wattson12

0

由于vals是字典的数组,你可以随便挑一排从阵列:

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

row将不匹配ID导致您的ID开始从0 1个row值如果您需要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,你不需要搜索为了它。

+0

这应该工作正常,除非值需要按ID排序。 NSDictionary不能保证任何特定的顺序(尽管当我使用它们时,它总是有)。 –

+0

我同意,但请注意'vals'是本例中的一个数组 - 它将保留订单 – lupatus

+0

您当然是对的。 –

相关问题