2013-01-23 32 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

您當然是對的。 –

相關問題