你好我曾尝试使用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);
非常感谢
答案 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"];