2012-04-10 5 views
0

в моей программе я хочу добавить 20 объектов в словарь, используя для петли, так что я сделалдобавлять объекты в словарь, используя цикл

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    self.responseData = nil; 

    NSArray* latestLoans = [(NSDictionary*)[responseString JSONValue] objectForKey:@"loans"]; 
    NSLog(@"%i",[latestLoans count]); 

parsedDict = [[NSMutableDictionary alloc] init]; 


for (int i=0; i<[latestLoans count]; i++) { 


    //get latest loan 
    NSDictionary* loan = [latestLoans objectAtIndex:i]; 

    //fetch the data 
    NSNumber* fundedAmount = [loan objectForKey:@"funded_amount"]; 
    NSNumber* loanAmount = [loan objectForKey:@"loan_amount"]; 
    float outstandingAmount = [loanAmount floatValue] - [fundedAmount floatValue]; 

    NSString* name = [loan objectForKey:@"name"]; 
    NSString* country = [(NSDictionary*)[loan objectForKey:@"location"] objectForKey:@"country"]; 

    [parsedDict setObject:fundedAmount forKey:@"funded_amount"]; 
    [parsedDict setObject:loanAmount forKey:@"loan_amount"]; 
    [parsedDict setObject:name forKey:@"name"]; 
    [parsedDict setObject:country forKey:@"location"]; 
     } 
nslog(@"%@",parsedDict); 

но когда я зарегистрировать ее из петли я получаю только последний добавлены значения .. не все значения.

ответ

2

Используйте массив для хранения записей ...

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
     self.responseData = nil; 

     NSArray* latestLoans = [(NSDictionary*)[responseString JSONValue] objectForKey:@"loans"]; 
     NSLog(@"%i",[latestLoans count]); 


    NSMutableArray someArray=[[NSMutableArray alloc]init]; 

    for (int i=0; i<[latestLoans count]; i++) { 

    parsedDict = [[NSMutableDictionary alloc] init]; 
     //get latest loan 
     NSDictionary* loan = [latestLoans objectAtIndex:i]; 

     //fetch the data 
     NSNumber* fundedAmount = [loan objectForKey:@"funded_amount"]; 
     NSNumber* loanAmount = [loan objectForKey:@"loan_amount"]; 
     float outstandingAmount = [loanAmount floatValue] - [fundedAmount floatValue]; 

     NSString* name = [loan objectForKey:@"name"]; 
     NSString* country = [(NSDictionary*)[loan objectForKey:@"location"] objectForKey:@"country"]; 

     [parsedDict setObject:fundedAmount forKey:@"funded_amount"]; 
     [parsedDict setObject:loanAmount forKey:@"loan_amount"]; 
     [parsedDict setObject:name forKey:@"name"]; 
     [parsedDict setObject:country forKey:@"location"]; 
     [someArray addObject:parsedDict]; 
      } 
    NSLog(@"%@",parsedDict); 

//Read from Array 


for(NSDictionary *tempDict in someArray) 
{ 
    //use [tempDict objectForKey:@"keyName"] to get values from each dictionary 
} 
+0

как я могу получить объект для ключа. если я использовать массив для хранения словарей – krishna

+0

для (NSDictionary * tempDict в SomeArray) { делать вещи } –

+0

я добавил код, как у сказал, но только последний элемент добавляется в 20 раз ... – krishna

4

Если вы добавите 2 значения с одним и тем же ключом, будет отображен только последний, поскольку все остальные будут перезаписаны. Вы можете захотеть (хотя это не так) добавить словарь для каждого цикла в массив/словарь.

+0

если добавить словарь в другой словарь затем, как retrive данные. могу у вас, пожалуйста, дайте мне пример кода, чтобы сделать это. – krishna

+2

@krishna Я думаю, вам нужно пойти и прочитать документацию для NSDictionary - понять, что он делает, а не просто пытаться скомпоновать фрагменты кода. –

+0

Пример Акаша Малхотра - это то, что я сказал в этом ответе. – Manuel

Смежные вопросы