2013-03-06 36 views
5

我有2個NSArrays,我試圖在一個NSDictionary鏈接在一起,使每個的providerNameproviderId與它相關聯。如何獲得NSDictionary中的數據到一個UITableView

我期望兩個陣列使用self.providersDict = [NSDictionary dictionaryWithObjects:providerName forKeys:providerId];相互關聯,然後提供者名稱將顯示爲表格單元格標題和ID作爲表格單元格字幕。

在我不能顯示在UITable的數據,甚至使用註銷字典的瞬間:

for (id key in self.providersDict) { 
    NSLog(@"key: %@, value: %@", key, [self.providersDict objectForKey:key]); 
} 

在.H聲明:

NSArray *providerName; 
NSArray *providerId; 

@property (nonatomic, strong) NSDictionary *providersDict; 

,並在viewDidLoad中:

providerName = [NSArray arrayWithObjects:@"provider1", @"provider2", @"provider3", nil]; 
    providerId = [NSArray arrayWithObjects:@"1", @"2", @"3", nil]; 

    self.providersDict = [NSDictionary dictionaryWithObjects:providerName 
                  forKeys:providerId]; 

的UITable方法:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [[self.providersDict allKeys] count]; 
} 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 



static NSString *unifiedID = @"aCellID"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:unifiedID]; 
    if (!cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:unifiedID]; 

} 

for (id key in self.providersDict) { 
    NSLog(@"key: %@, value: %@", key, [self.providersDict objectForKey:key]); 
} 

NSString *providerNameString = [self.providersDict objectForKey:@"provider"]; 
NSString *providerIdString = [self.providersDict objectForKey:@"object"]; 
cell.textLabel.text = providerNameString; 
cell.detailTextLabel.text = providerIdString; 


return cell; 

} 

感謝您的幫助。

+0

什麼是你需要的數據?你能解釋我嗎? – 2013-03-06 12:38:22

+0

我認爲上述可行。我期望這兩個數組使用self.providersDict = [NSDictionary dictionaryWithObjects:providerName forKeys:providerId];然後將providerName作爲表格單元格標題顯示,將id作爲表格單元格標題顯示。 nslog語句沒有運行。我不知道爲什麼。 – hanumanDev 2013-03-06 12:40:06

+0

我假設您的providersDict中沒有鍵名爲「object」和「provider」,鍵是1,2,3?你不能枚舉字典,因爲你正在嘗試做日誌...... – Ankit 2013-03-06 12:44:10

回答

16
NSString *providerNameString = [self.providersDict objectForKey:@"provider"]; 
NSString *providerIdString = [self.providersDict objectForKey:@"object"]; 

你已經初始化按鍵1,2,3,self.providersDict所以,你應該嘗試使用這些密鑰,而不是@"provider"同爲providerIdString獲取providerNameString

嘗試

NSString *key = [self.providersDict allKeys][indexPath.row]; 

NSString *providerNameString = self.providersDict[key]; 
NSString *providerIdString = key; 
cell.textLabel.text = providerNameString; 
cell.detailTextLabel.text = providerIdString; 

而且不要忘記調用[tableView reloadData];一旦你self.providersDict被初始化。

至於爲什麼不建立一個模型類爲Provider與id,名稱和其他信息的建議。您可以將每個提供程序添加到數組中,並會使您的生活變得更加輕鬆。

+0

感謝您的幫助! :) – hanumanDev 2013-03-06 13:04:29

+0

你已經通過upvoting來感謝我了。但是,如果你可以嘗試爲Provider創建一個模型對象 – Anupdas 2013-03-06 13:16:48

-2

你的目的,你不需要任何NSDictionary,只需用兩個NSArrays來填充UITableView

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *unifiedID = @"aCellID"; 
    UITableViewCell *cell = 
    [tableView dequeueReusableCellWithIdentifier:unifiedID]; 

    if (!cell) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:unifiedID]; 
    } 

    NSString *providerNameString = [providerName objectAtIndex:indexPath.row]; 
    NSString *providerIdString = [providerId objectAtIndex:indexPath.row]; 
    cell.textLabel.text = providerNameString; 
    cell.detailTextLabel.text = providerIdString; 
    return cell; 
} 
相關問題