title: MKMapView annotations changing/losing order?
body: <p>I have a map view with annotations, and these annotations display a callout. When the callout's disclosure detail button is clicked, it segues into a new view. </p>
  
  <p>My MKAnnotations are a custom class that implements <code>&lt;MKAnnotation&gt;</code>. Let's call that class MyClass. They are stored in an NSMutableArray. During viewdidload of this view, I add each object of MyClass in this array to the map view's annotations. Using the debugger, I can see that once all of this adding is done, the [self.MapView annotations] order is the same as the NSMutableArray.</p>
  
  <p>Now I set another breakpoint within mapView:viewForAnnotation: and check out the order of 1) my NSMutableArray and 2) [self.MapView annotations]. The array is of course in the same order. However, the order of the annotations has been scrambled.</p>
  
  <p>This was a big problem for me, because I needed to use the specific instance of MyClass that the user selected in the next view. AKA, I wanted to look at the annotation, find its index, and then use that to get the same index within the array. </p>
  
  <p>I've now realized that I can just save the annotation directly (coming from an Android background, this was very cool to me). However, I am still conceptually at a loss as to why the order became scrambled. Can someone help me? Code below:</p>
  
  <pre><code>- (void)viewDidLoad
  {
  
  
      if([fromString isEqualToString:@"FromList"])
          self.navigationItem.hidesBackButton = TRUE;
      else { 
          self.navigationItem.rightBarButtonItem = nil;
      }
  
  
      self.array = [MySingleton getArray];
      //set up map
  
      //declare latitude and longitude of map center
      CLLocationCoordinate2D center;
      center.latitude = 45;
      center.longitude = 45;
  
      //declare span of map (height and width in degrees)
      MKCoordinateSpan span;
      span.latitudeDelta = .4;
      span.longitudeDelta = .4;
  
      //add center and span to a region, 
      //adjust the region to fit in the mapview 
      //and assign to mapview region
      MKCoordinateRegion region;
      region.center = center;
      region.span = span;
      MapView.region = [MapView regionThatFits:region];
  
      for(MyClass *t in self.array){
          [MapView addAnnotation:t];
      }
      [super viewDidLoad];
  }
  
  
  
  //this is the required method implementation for MKMapView annotations
  - (MKAnnotationView *) mapView:(MKMapView *)thisMapView 
               viewForAnnotation:(MyClass *)annotation
  {
  
  
      static NSString *identifier = @"MyIdentifier";
  
      //the result of the call is being cast (MKPinAnnotationView *) to the correct
      //view class or else the compiler complains
      MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[thisMapView 
                                                                    dequeueReusableAnnotationViewWithIdentifier:identifier];
      if(annotationView == nil)
      {
          annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
      }
  
      annotationView.pinColor = MKPinAnnotationColorGreen;
  
      //pin drops when it first appears
      annotationView.animatesDrop=TRUE;
  
      //tapping the pin produces a gray box which shows title and subtitle  
      annotationView.canShowCallout = YES;
  
      UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
      annotationView.rightCalloutAccessoryView = infoButton;
  
  
      return annotationView;
  }
  </code></pre>