2013-03-06 11 views
5

Ho 2 NSArrays che sto cercando di collegare insieme in un NSDictionary in modo che ogni providerName ha un ProviderId ad esso associati.Come ottenere i dati NSDictionary in un UITableView

Mi aspettavo che i due array fossero associati l'uno con l'altro usando self.providersDict = [NSDictionary dictionaryWithObjects:providerName forKeys:providerId]; e quindi il providerName da visualizzare come titolo della cella della tabella e l'id come sottotitolo della cella della tabella.

Al momento non riesco a ottenere i dati visualizzati sul uitable oppure uscire il dizionario con:

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

dichiarato nel .h:

NSArray *providerName; 
NSArray *providerId; 

@property (nonatomic, strong) NSDictionary *providersDict; 

e nel viewDidLoad :

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

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

metodi datto:

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

} 

grazie per l'aiuto.

+0

Qual è la vostra esigenza? Potresti spiegarmi per favore? –

+0

Pensavo che quanto sopra avrebbe funzionato. Mi aspettavo che i due array fossero associati tra loro usando self.providersDict = [dizionario NSDictionaryWithObjects: providerName forKeys: providerId]; e quindi il providerName da visualizzare come titolo della cella della tabella e id come sottotitolo della cella della tabella. la dichiarazione nslog non è stata eseguita. Non sono sicuro del perché. – hanumanDev

+0

Suppongo che non ci siano chiavi denominate "oggetto" e "provider" nel providerDict, le chiavi sono 1,2,3? e non puoi enumerare il dizionario come stai cercando di fare per i log .... – Ankit

risposta

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

Hai inizializzato self.providersDict con i tasti 1, 2, 3. Quindi, si dovrebbe cercare di recuperare providerNameString utilizzando quelle chiavi e non @"provider" stesse per providerIdString.

Prova

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

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

e non dimenticare di chiamare [tableView reloadData]; una volta che il self.providersDict è inizializzato.

Per quanto riguarda un suggerimento, perché non creare una classe modello per Provider con ID, nome e altre informazioni. È possibile aggiungere ogni fornitore in un array e renderebbe la vita molto più semplice.

+0

grazie per l'aiuto! :) – hanumanDev

+0

Mi hai già ringraziato mandando al rialzo. Ma ancora una volta se puoi provare a creare un oggetto modello per Provider :) – Anupdas

-2

per il vostro scopo, non è necessario alcun NSDictionary, è sufficiente utilizzare due NSArrays per popolare i dati in 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; 
} 
Problemi correlati