使用for循环填充NSMutableDictionary,然后它显示最后加载的值

时间:2013-07-03 13:57:43

标签: ios nsmutabledictionary

你好我曾尝试使用for循环用两个NSMutableArray数据填充NSMutableDictionary,当循环结束时,NSMutableDictionary只显示最后加载的值,是什么错误?按照代码

 -(void)calculateDistance
{
    self.distanceArray=[[NSMutableArray alloc]init];
    self.dict=[[NSMutableDictionary alloc]init];



    for (int i=0; i<[self.nombre count]; i++) {


       CLLocation *shopPosition=[[CLLocation alloc]initWithLatitude:[[self.latitud objectAtIndex:i] floatValue]longitude:[[self.longitud objectAtIndex:i]floatValue]];
        self.userPosition=[[CLLocation alloc]initWithLatitude:self.currentLat longitude:self.currentLong];

        self.distance=[shopPosition distanceFromLocation:self.userPosition];

       [self.distanceArray addObject:[NSNumber numberWithFloat:self.distance]];

        [self.dict setObject:[self.distanceArray objectAtIndex:i] forKey:@"distance"];
        [self.dict setObject:[self.nombre objectAtIndex:i]  forKey:@"nombre"];


   }

    NSLog(@" DICT %@",self.dict);

非常感谢

2 个答案:

答案 0 :(得分:2)

您始终将新值设置为相同的键:

[self.dict setObject:[self.distanceArray objectAtIndex:i] forKey:@"distance"];
[self.dict setObject:[self.nombre objectAtIndex:i]  forKey:@"nombre"];

你应该使用NSMutableArray并在每个循环周期中添加一个新的NSDictionary。

    NSDictionary *dict = @{@"distance" : self.distanceArray[i],
                           @"nombre"   : self.nombre[i]
   };

    [self.newMutArray addObject: dict];

答案 1 :(得分:1)

[self.dict setObject:[self.distanceArray objectAtIndex:i] forKey:@"distance"];
[self.dict setObject:[self.nombre objectAtIndex:i]  forKey:@"nombre"];

这两行是你的问题。每次获得新nombre或新distanceArray时,您都会将其保存到NSDictionary中的相同密钥。

所以最后你的NSDictionary只会有两个键,“距离”和“nombre”。

您可能需要做的是创建一个NSMutableArray NSDictionary个对象,否则您将不得不开始为字典中的每个对象创建多个键,例如键:“nombre1”,“ nombre2“等等。

尝试在NSMutableArray中添加i NSDictionary个对象。像这样:

[array addObject:[NSDictionary dictionaryWithObjectsAndKeys:[self.distanceArray objectAtIndex:i],@"distance",[self.nombre objectAtIndex:i],@"nombre"]];

然后,您的最终array对象将包含i NSDictionary个对象,每个对象包含一个nombre和一个距离键。

要访问索引n的nombre和距离,您可以使用:

nombre = [[array objectAtIndex:n] objectForKey:@"nombre"];
distance = [[array objectAtIndex:n] objectForKey:@"distance"];