Question

I loop through NSDictionaries to calculate distance from user location to annotations like this:

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];

The result:

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.

Then I try to add distance for dictionaries in array

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

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

But it add only last distance (Distance: 163058 m.) for all dictionaries.

How can I set different value for different dictionary?

EDIT: My loop

    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"];


        }



    }
Was it helpful?

Solution

You can Add all the Values in some Array and then you can use it to save in different Dictionaries.

After this Line :

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

Add :

NSString *dist = [NSString stringWithFormat:@"%4.0f m.", distance];
NSMutableDictionary *inDict = [[NSMutableDictionary alloc] init];
inDict = [ann objectAtIndex:i];
[inDict setValue:dist forKey:@"Distance"];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top