2013-01-03 8 views
7

पर एनोटेशन रीफ्रेश करें मेरे पास एक नक्शादृश्य है जहां एनोटेशन के निर्देशांक लगातार अद्यतन किए जा रहे हैं, लेकिन जब मैं सेटकॉर्डिनेट का उपयोग करता हूं, तो एनोटेशन नहीं चलता है। मैं अपने निर्देशांक को प्रतिबिंबित करने के लिए एनोटेशन कैसे रीफ्रेश कर सकता हूं?आईओएस मैप्यूव

- (void)updateUnits { 

    PFQuery *query = [PFQuery queryWithClassName:@"devices"]; 
    [query whereKeyExists:@"location"]; 
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

     if (!error) { 

      for (PFObject *row in objects) { 

       PFGeoPoint *geoPoint = [row objectForKey:@"location"]; 
       CLLocationCoordinate2D coord = { geoPoint.latitude, geoPoint.longitude }; 

       for (id<MKAnnotation> ann in mapView.annotations) { 

        if ([ann.title isEqualToString:[row objectForKey:@"deviceid"]]) { 

         [ann setCoordinate:coord]; 

         NSLog(@"latitude is: %f" , coord.latitude); 
         NSLog(@"Is called"); 
         break; 
        } 
        else { 

         //[self.mapView removeAnnotation:ann]; 
        } 
       } 
      } 
     } 
     else { 

     } 
    }]; 
} 
+0

यह एनोटेशन ऑब्जेक्ट में निर्देशांक को बदलकर किया जा सकता है। इसे एनोटेशन को हटाने की आवश्यकता नहीं है, और उसके बाद परिवर्तन के लिए मानचित्र में जोड़ा गया –

उत्तर

14

अपडेट किया गया (समाधान प्रतिबिंबित करने के लिए):

अपने स्वयं के कस्टम एनोटेशन होने और setCoordinate को लागू करने और/या समन्वय समस्याएँ उत्पन्न कर सकते synthesizing।

स्रोत: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps.html

पिछला समाधान:

आप बस एनोटेशन के सभी को हटा सकते हैं और फिर उन्हें पुन: जोड़ें।

[mapView removeAnnotations:[mapView.annotations]]; 

[mapView addAnnotations:(NSArray *)]; 

या उन्हें हटाने और उन्हें एक के बाद एक फिर से जोड़:

for (id<MKAnnotation> annotation in mapView.annotations) 
{ 
    [mapView removeAnnotation:annotation]; 
    // change coordinates etc 
    [mapView addAnnotation:annotation]; 
} 
+0

यह बहुत अधिक गहन है, जब आप अपने निर्देशांक बदल सकते हैं। –

+0

क्या वे एक कस्टम एनोटेशन हैं? यदि हां, तो क्या आपने समन्वय संपत्ति अधिभारित की? –

+0

हां यह कस्टम है। समन्वय संपत्ति अधिभार से आपका क्या मतलब है? –

0

[self.mapView removeAnnotations:self.mapView.annotations] उपयोग करके देखें:

- (void)viewDidAppear:(BOOL)animated 
{ 

[super viewDidAppear:animated]; 

[self.mapView removeAnnotations:self.mapView.annotations]; 

PFQuery *query = [PFQuery queryWithClassName:@"caches"]; 

[query findObjectsInBackgroundWithBlock:^(NSArray *comments, NSError *error) 
{ 
    for (PFObject *comment in comments) 
    { 
     NSString *tit = comment[@"titulo"]; 
     NSString *lat = comment[@"latitud"]; 
     NSString *lon = comment[@"longitud"]; 

     float latFloat = [lat floatValue]; 
     float lonFloat = [lon floatValue]; 

     CLLocationCoordinate2D Pin; 
     Pin.latitude = latFloat; 
     Pin.longitude = lonFloat; 
     MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc]init]; 
     annotationPoint.coordinate = Pin; 
     annotationPoint.title = tit; 

     [self.mapView addAnnotation:annotationPoint]; 

    } 

}]; 
} 
9

मुख्य थ्रेड पर ऐड एनोटेशन डिस्पैच नहीं बल्कि उसके बाद संशोधित करने का प्रयास पृष्ठभूमि थ्रेड पर यूआई

dispatch_async(dispatch_get_main_queue()) { 
    self.mapView.addAnnotation(annotation) 
} 
+1

धन्यवाद! इससे मेरी समस्या के साथ मेरी मदद मिली, मैप व्यू ने मेरे अतिरिक्त एनोटेशन के साथ अपडेट नहीं किया जब तक कि मैं मैन्युअल रूप से मानचित्र को स्थानांतरित नहीं करता। –

4

नाथन के जवाब का स्विफ्ट 3.0 संस्करण (आप नाथन धन्यवाद):

DispatchQueue.main.async { 
    mapView.addAnnotation(annotation) 
} 

साइड नोट, नाथन के जवाब में कहीं अधिक upvotes होना चाहिए। मुझे वास्तव में एक एनोटेशन हटाने के साथ इस मदद की ज़रूरत है, वही समस्या मौजूद है और मुख्य कतार में अद्यतन प्रेषित करके तय की गई है।

+1

यह तब तक जवाब है जब तक ऐप्पल का बेहतर समाधान न हो! –