2013-05-20 9 views
5

Ho plist, voglio aggiungere i elememts da questo plist a un dizionario mutabile. Prima controllo il nome utente in plist e il mio nome attuale è uguale o no se è lo stesso quindi voglio aggiungere tutto il valore a quel dizionario e plist e assegnare anche la stessa chiave?Come aggiungo l'oggetto a NSMutableDictionary con la chiave?

for(int i=0;i<[displayList count];i++) 
    { 
     if([[[data valueForKey:@"username"] objectAtIndex:i] isEqualToString:user]) 
     { 
      [finalBooks setValue:[[data valueForKey:@"ID"] objectAtIndex:i] forKey:@"ID"]; 
      [finalBooks setValue:[[data valueForKey:@"name"] objectAtIndex:i] forKey:@"name"]; 
      [finalBooks setValue:[[data valueForKey:@"Place"] objectAtIndex:i] forKey:@"Place"]; 
      [finalBooks setValue:[[data valueForKey:@"username"] objectAtIndex:i] forKey:@"username"]; 


     } 
    } 

[count DisplayList] questo valore è 7 così ogni valore di sostituzione di 6 volte, e sto ricevendo solo i valori finali Voglio che ogni valori corrispondenti al nome utente i che mutabledictionary

+0

quindi qual è il problema? si spera che "' finalBooks' "sia il tuo" NSMutableDictionary' ", si? –

+0

sì ma [countList count] questo valore è 7, quindi ogni valore sostituisce 6 volte, e sto ottenendo solo i valori finali –

+0

@mango questo è perché stai impostando (* sostituendo *) i valori del dizionario con le stesse chiavi in ​​ogni iterazione, ecco perché ottieni solo valori finali. –

risposta

12

penso che si dovrebbe creare array di dizionario. Basta aggiungere il dizionario di FinalBooks a NSMutableArray come questo

NSMutableArray *finalArray = [[NSMutableArray alloc]init]; 

(int i=0;i<[displayList count];i++) 
{ 
    if([[[data valueForKey:@"username"] objectAtIndex:i] isEqualToString:user]) 
    { 
     [finalBooks setValue:[[data valueForKey:@"ID"] objectAtIndex:i] forKey:@"ID"]; 
     [finalBooks setValue:[[data valueForKey:@"name"] objectAtIndex:i] forKey:@"name"]; 
     [finalBooks setValue:[[data valueForKey:@"Place"] objectAtIndex:i] forKey:@"Place"]; 
     [finalBooks setValue:[[data valueForKey:@"username"] objectAtIndex:i] forKey:@"username"]; 

     [finalArray addObject:finalBooks]; 
    } 
} 

E otterrete array di dizionario. In bocca al lupo !!

+0

grazie mille –

+1

Non dovresti usare -objectForKey:/- setObject: forKey :? – Arcank

+0

è finalBooks = finalArray ??? – anson

2

Il metodo setValue in un NSMutableDictionary sostituisce il valore se la chiave è uguale. Quindi quello che puoi fare è usare NSMutableDictionary di array o dizionari.

NSMutableDictionary *userDictionary=[[NSMutableDictionary alloc]init]; 

(int i=0;i<[displayList count];i++) 
{ 
    if([[[data valueForKey:@"username"] objectAtIndex:i] isEqualToString:user]) 
    { 
     [finalBooks setValue:[[data valueForKey:@"ID"] objectAtIndex:i] forKey:@"ID"]; 
     [finalBooks setValue:[[data valueForKey:@"name"] objectAtIndex:i] forKey:@"name"]; 
     [finalBooks setValue:[[data valueForKey:@"Place"] objectAtIndex:i] forKey:@"Place"]; 
     [finalBooks setValue:[[data valueForKey:@"username"] objectAtIndex:i] forKey:@"username"]; 

     [userDictionary setObject:finalBooks forKey:user]; 
    } 
} 

Se si vuole tutto in un dizionario, vi suggerisco di utilizzare una chiave univoca come NSString stringWithFormat:@"ID+%@",username],...[NSString stringWithFormat:@"username+%@",username]

ma sembra disordinato :)

Problemi correlati