समस्या मैप करने के लिए कई एनोटेशन जोड़ने

वोट
1

ठीक है, तो मैं इस समस्या हो रही है। मुझे क्या करना चाहते हैं मैन्युअल रूप से एक नक्शा करने के लिए कई एनोटेशन जोड़ने है। जब मैं सिर्फ एक टिप्पणी जोड़ने के लिए, यह दोषरहित काम करता है। पिन बूँदें, आप अपनी कॉल आउट देखने के लिए उस पर क्लिक कर सकते हैं, जीवन अच्छा है।

समस्या तब आती है जब मैं एक से अधिक जोड़ना चाहते हैं। जब मैं दूसरे जोड़ने के लिए, अचानक पिन के सही ढंग से रंग के होते हैं (अर्थात उनके परिमाण के आधार वे एक निश्चित रंग का होना चाहिए, लेकिन वे अब दोनों एक ही कर रहे हैं ...), और अधिक महत्वपूर्ण है जब आप उन पर क्लिक करें, अपने को देखने के लिए कॉल आउट, एप्लिकेशन exex_bad_access साथ दुर्घटनाओं। मैं वास्तव में नहीं पता कि क्या गलत है, हो सकता है मैं नक्शा करने के लिए बहुत अधिक बार देखा जोड़ रहा है? लेकिन यह केवल 9 पिन है और पिन के लिए खुद को ठीक जोड़ें। यहाँ मेरी कोड है ...

    - (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray *stops = [[NSMutableArray alloc] init];  //Get list of all the stops available
    Bus *bus1 = [[Bus alloc] init];                         // Bus 1 holds the stops
    stops = [bus1 returnStops];
    for (NSString *stop in stops)                           //Go through each stop to add annotation to map
    {
        Bus *bus2 = [bus1 initWithStop:stop];                //Create an instance of bus with a given stop
        MapAnnotation *eqAnn = [MapAnnotation annotationWithBus:bus2]; 
        [self.mapView addAnnotation:eqAnn];                    //Add the annotation to the map
        //[eqAnn release];
        //[bus2 release];
    }
    [self recenterMap];
    [stops release];

}
- (MKAnnotationView *)mapView:(MKMapView *)mapView 
            viewForAnnotation:(id <MKAnnotation>)annotation {
    MKAnnotationView *view = nil;
    if(annotation != mapView.userLocation) {
        MapAnnotation *eqAnn = (MapAnnotation*)annotation;
        view = [self.mapView dequeueReusableAnnotationViewWithIdentifier:@busLoc];
        if(nil == view) {
            view = [[[MKPinAnnotationView alloc] initWithAnnotation:eqAnn
                                                    reuseIdentifier:@busLoc] autorelease];
        }
        CGFloat magnituide = [eqAnn.bus.magnitude floatValue];

        if(magnituide >= .80f) {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorRed];
        } else if(magnituide >= .60f) {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorPurple];
        } else 
        {
            [(MKPinAnnotationView *)view setPinColor:MKPinAnnotationColorGreen];
        }
        [(MKPinAnnotationView *)view setAnimatesDrop:YES];
        [view setCanShowCallout:YES];
    } 

    return view;
}

यहां तक ​​कि दूसरे समारोह को दूर करने की कोशिश की है, लेकिन यह कुछ भी नहीं किया।

सहायता के लिए धन्यवाद! पुनश्च मैं भी जोड़ना चाहिए, वहां आमतौर पर है 9 जो जब आप एनोटेशन क्लिक करें काम करता है में से एक या दो पिनों ...

मैं भी मैन्युअल रूप से सिर्फ दो कार्यक्रम में हाथ से एनोटेशन का प्रयास करते हैं (यानी, पाश निकालने के लिए), यह अभी भी विफल रहता है और रंग अभी भी गलत है ...

17/08/2009 को 18:49
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
1

ऐसा लगता है कि के अपने स्मृति प्रबंधन stopsचर सही नहीं है। तुम एक अस्थायी सरणी का आवंटन, तो की वापसी मान के साथ कि सरणी की जगह -[Bus returnStops]तो है कि रिलीज,। इसके अलावा यह स्पष्ट नहीं है कि क्या चल रहा है bus2- करता है -[Bus initWithStop:]एक वापसी विभिन्न के कहने Bus? यह किसी भी विधि को भेजने के लिए हमेशा की तरह नहीं है -init*पहले से initialised वस्तु पर। मुझे लगता है कि आप शायद कोको टच में स्मृति प्रबंधन सम्मेलनों से उलझन में रहे हैं। यहाँ लेख और अन्य संदर्भों का एक संग्रह है कोको स्मृति प्रबंधन पर (जो एक ही जानवर है)।

17/08/2009 को 18:55
का स्रोत उपयोगकर्ता

वोट
0

अतः जवाब है कि मैं init वस्तु bus1 भेजने रखा था, तो यह उलझन में मिल गया।

"हाय डेविड,

आपका डाटा मॉडल मेरे लिए hosed लग। करने के लिए: आप केवल एक ही बस उद्देश्य यह है कि आप बार-बार initWithStop भेज रहे है।

उम्मीद है की यह मदद करेगा।

सौभाग्य! "

आपकी मदद के लिए आप लोगों का धन्यवाद! आप सभी मुझे काफ़ी मदद की!

17/08/2009 को 20:02
का स्रोत उपयोगकर्ता

वोट
0

मैं यह फोन नहीं होगा एक स्मृति प्रबंधन समस्या - मैं सिर्फ इतना कहना चाहते हैं आप गलत तरीके से सरणी के संदर्भ का उपयोग कर रहे हैं।

NSMutableArray * के साथ सरणी का निर्माण बंद हो जाता है के बाद = [[NSMutableArray alloc] init], अगले कदम का उपयोग करने के लिए है [addObject बंद हो जाता है:] जोड़ने के लिए प्रत्येक को रोकने आप संग्रहीत करना चाहते हैं।

उसके बाद? यह स्पष्ट नहीं है क्या तुम सच में ऐसा करने की कोशिश कर रहे हैं।

17/08/2009 को 19:34
का स्रोत उपयोगकर्ता

वोट
0

आप AddAnnotations का उपयोग कर के बजाय टिप्पणी जोड़ने की कोशिश की? - (शून्य) addAnnotations: (NSArray *) एनोटेशन। यह आप के लिए काम कर सकते हैं ... लेकिन इसके बाद के संस्करण जवाब और आगे निरीक्षण आप अपने viewDidLoad में कुछ स्मृति प्रबंधन मुद्दों कर रहे पर देख रहे हैं (हालांकि थी s अपने समस्या का कारण नहीं हो सकता है, लेकिन यह हो सकता है)। सबसे पहले आप सरणी (बंद हो जाता है) का आवंटन कर रहे हैं और उसके बाद बस वस्तु में कुछ सरणी के साथ यह ovveriding की, यह एक रिसाव का कारण होगा। इसके अलावा, आप तो उस सरणी जो दुर्घटना का कारण हो सकता है क्योंकि आप सरणी बस वस्तु w ithout इसे करने के लिए एक संदर्भ गिनती में वृद्धि हुई होने में ही वास्तव में वह जारी कर रहे हैं जारी कर रहे हैं। मुझे यकीन है कि क्या initWithStop कर रहा है, लेकिन आप भी यहाँ एक रिसाव हो रही हो सकता है अगर initWithStop वस्तु को बरकरार रखे हुए नहीं हूँ।

17/08/2009 को 18:56
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more