不能为不同的字典设置不同的值

时间:2013-05-04 13:09:04

标签: ios xcode arrays nsdictionary setvalue

我遍历NSDictionaries来计算从用户位置到注释的距离,如下所示:

CLLocation *pinLocation = [[CLLocation alloc]
                                       initWithLatitude:realLatitude
                                       longitude:realLongitude];

CLLocation *userLocation = [[CLLocation alloc]
                                        initWithLatitude:mapView.userLocation.coordinate.latitude
                                        longitude:mapView.userLocation.coordinate.longitude];

CLLocationDistance distance = [pinLocation distanceFromLocation:userLocation];

结果:

NSLog(@"Distance: %4.0f m.", distance);

2013-05-04 15:58:53.301 testApp[3194:907] Distance: 65758 m.
2013-05-04 15:58:53.304 testApp[3194:907] Distance: 91454 m.
2013-05-04 15:58:53.308 testApp[3194:907] Distance: 248726 m.
2013-05-04 15:58:53.310 testApp[3194:907] Distance: 297228 m.
2013-05-04 15:58:53.313 testApp[3194:907] Distance: 163058 m.

然后我尝试为数组中的词典添加距离

NSString *dist = [NSString stringWithFormat:@"%4.0f m.", distance];

[ann setValue:dist forKey:@"Distance"];

但它只为所有词典添加了最后距离(距离:163058米)。

如何为不同的字典设置不同的值?

编辑:我的循环

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"blueKey"])
    {

        ann = [dict objectForKey:@"Blue"];

        [resultArray addObject:@"Blue"];


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


            NSString *coordinates = [[ann objectAtIndex:i] objectForKey:@"Coordinates"];

            double realLatitude = [[[coordinates componentsSeparatedByString:@","] objectAtIndex:1] doubleValue];
            double realLongitude = [[[coordinates componentsSeparatedByString:@","] objectAtIndex:0] doubleValue];

            MyAnnotation *myAnnotation = [[MyAnnotation alloc] init];
            CLLocationCoordinate2D theCoordinate;
            theCoordinate.latitude = realLatitude;
            theCoordinate.longitude = realLongitude;

            myAnnotation.coordinate=CLLocationCoordinate2DMake(realLatitude,realLongitude);
            myAnnotation.title = [[ann objectAtIndex:i] objectForKey:@"Name"];
            myAnnotation.subtitle = [[ann objectAtIndex:i] objectForKey:@"Address"];
            myAnnotation.icon = [[ann objectAtIndex:0] objectForKey:@"Icon"];

            [mapView addAnnotation:myAnnotation];
            [annotations addObject:myAnnotation];



            // Calculating distance
            CLLocation *pinLocation = [[CLLocation alloc]
                                       initWithLatitude:realLatitude
                                       longitude:realLongitude];

            CLLocation *userLocation = [[CLLocation alloc]
                                        initWithLatitude:mapView.userLocation.coordinate.latitude
                                        longitude:mapView.userLocation.coordinate.longitude];

            CLLocationDistance distance = [pinLocation distanceFromLocation:userLocation];

            // NSLog(@"Distance: %4.0f m.", distance);


            NSString *dist = [NSString stringWithFormat:@"%4.0f m.", distance];
            [ann setValue:dist forKey:@"Distance"];


        }



    }

1 个答案:

答案 0 :(得分:1)

您可以在某些数组中添加所有值,然后您可以使用它来保存在不同的词典中。

此行之后:

// NSLog(@"Distance: %4.0f m.", distance);

添加:

NSString *dist = [NSString stringWithFormat:@"%4.0f m.", distance];
NSMutableDictionary *inDict = [[NSMutableDictionary alloc] init];
inDict = [ann objectAtIndex:i];
[inDict setValue:dist forKey:@"Distance"];