-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から始まることを覚えておく必要がありますが、これを考慮する必要があります。

編集:アイテムが欠落している場合をキャッチするために、ループの後にreturnnilまたは@""を追加する必要があります。しかし、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"];

rowID が 1 から始まり、値が 0 から始まるため、ID と一致しません。row何らかの理由で 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 は同じrow+1であり、検索する必要はありません。

于 2013-01-23T08:53:19.737 に答える