Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用NSDictionary_Ios_Objective C_Cocoa Touch - Fatal编程技术网

Ios 使用NSDictionary

Ios 使用NSDictionary,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,鉴于这本词典: "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:

鉴于这本词典:

"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
,如何获取该ID的名称?

非常基本的方法:

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];

由于
vals
是一个字典数组,您可以从数组中选择一行:

NSArray *values = [dict objectForKey:@"vals"];
NSDictionary *value = [values objectAtIndex:row];
return (NSString *) [value objectForKey:@"NAME"];
与ID不匹配,因为您的ID从1开始,而
值从0开始。 如果您出于某些原因需要ID,我建议您在选择选择器行时获取该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等于
行+1
,你不需要搜索它。

这不是一个字典数组吗?@nickfalk它是一个字典,它唯一的元素是一个字典数组为什么不把ID作为键,名字作为值呢?问题到底是什么?标题甚至不是一个问题。+1,我尝试过的内容您在for循环之后有相同的权利,他可以添加
return@
以确保事件中返回空字符串(不是nil,而是选择器可以处理的内容),并且没有与行对应的ID。当然,对于第一行,它应该是“for(idValue-1=row)”,而不是零。@HermannKlecker正确。这是非常基本的,没有错误检查,并且绝对不会为第一个值提供值,因为字典现在已经设置好,除非值需要按ID排序,否则应该可以正常工作。NSDictionary不保证任何特定的顺序(尽管在我使用它们时,它在所有情况下都有)。我同意,但请注意,
vals
在本例中是一个数组-它将保持一个顺序,当然,您是对的。