0

您好,我曾尝试使用 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);

非常感谢

4

2 回答 2

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];
于 2013-07-03T14:03:05.037 回答
1
[self.dict setObject:[self.distanceArray objectAtIndex:i] forKey:@"distance"];
[self.dict setObject:[self.nombre objectAtIndex:i]  forKey:@"nombre"];

这两行是你的问题。每次你得到一个新的nombre或新的distanceArray,你都将它保存到你的NSDictionary.

所以最后你NSDictionary将只有两个键,“距离”和“名词”。

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

尝试用NSMutableArray其中的i NSDictionary对象制作一个。像这样:

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

然后你的最终array对象将i NSDictionary包含每个对象,每个对象都包含一个名词和一个距离键。

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

nombre = [[array objectAtIndex:n] objectForKey:@"nombre"];
distance = [[array objectAtIndex:n] objectForKey:@"distance"];
于 2013-07-03T14:10:27.177 回答