addAnnotations मुद्दा (स्मृति प्रबंधन शायद?)

वोट
1

मैं MKMapView / एनोटेशन / UINavigationController के साथ कुछ समस्या आ रही है। मूल रूप से, मैं एक UINavigationController का उपयोग कर अपने विचार का प्रबंधन; मेरे विचार से एक एक MKMapView होता है और मैं addAnnotations पद्धति का उपयोग करके यह (200 10) पर भी टिप्पणियां जोड़ें।

सब कुछ एक बात के अलावा ठीक काम कर रहा है: अगर मैं अपने UINavigationController, iphone सिम्युलेटर दुर्घटनाओं पर नेविगेट बहुत तेजी से, एक EXC खराब पहुंच संकेत प्राप्त। उदाहरण के लिए, अगर मैं MKMapView युक्त मेरे विचार लोड और immediatly UINavigationController नेविगेशन बार से वापस बटन दबाते हैं, मैं संकेत मिलता है। मैं लगा कि समस्या addAnnotations विधि के साथ था: जब मेरे MKMapView भरी हुई है, मैं इसे में व्याख्या जोड़ने लेकिन जैसे हर चीज़ एसिंक्रोनस किया जाता है यह लग रहा है। यदि मैं वापस बटन पुश से पहले एक दूसरे की तरह प्रतीक्षा करें, मैं कोई त्रुटि मिलती है लेकिन अगर मैं बहुत तेजी से कर रहा हूँ, यह दुर्घटनाओं। मैं सब अगर मैं addAnnotations लाइन को हटाने में कोई त्रुटि मिलती है। मुझे लगता है कि क्योंकि मेरे विचार UINavigationController द्वारा जारी की है इससे पहले कि addAnnotations विधि काम किया मिल गया बस।

इस के लिए किसी भी अच्छा समाधान? मैं उपयोगकर्ता (उदाहरण के लिए एक लोड हो रहा है दृश्य दिखाते हैं) इंतजार नहीं करना चाहते हैं, मैं लगता है कि समाधान के लिए एक बेहतर स्मृति प्रबंधन हो सकता है, लेकिन मैं मैं यह कैसे कर सकता है नहीं दिख रहा।

    if(DEBUG_MODE) { NSLog(@Creating array of placemarks : begin); }
self.placemarkCache = [[NSMutableArray alloc] init];
// Loading placemarks for a placemark dictionary
NSArray *sortedKeys = [[self.placemarkDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];
for (id key in sortedKeys) {
    MyPlacemark *currentPlacemark = [self.placemarkDictionary objectForKey:key];
    [self.placemarkCache addObject:currentPlacemark];
    [currentPlacemark release];
}
if(DEBUG_MODE) { NSLog(@Creating array of placemarks : done); }
if(DEBUG_MODE) { NSLog(@Adding placemarks : begin); }
[self.mapView addAnnotations:self.placemarkCache];
if(DEBUG_MODE) { NSLog(@Adding placemarks : done); }

इस उदाहरण पर, मैं जोड़ने स्थान-चिह्न: किया मिल कुछ भी करने से पहले संदेश नक्शे पर प्रदर्शित हो।

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


1 जवाब

वोट
5

मैं एक ही मुद्दा या बग में भाग है, और एक पर एक समाधान पाया ब्लॉग पोस्ट

यदि आप जो देख रहे डिबगर स्टैक ट्रेस को देखकर पोस्ट में इस मुद्दे के रूप में ही है आप देख सकते हैं।

इस तथ्य के कारण को MapViewController (MKMapView की मूल) dealloc'd किया गया है और async नक्शा MKMapView के आंतरिक भागों को लाते समय MKMapView के प्रतिनिधि (जो MapViewController था) कॉल करने के लिए कोशिश कर रहा है मुद्दा है।

तो, MapViewController की dealloc पर, आप MKMapView.delegate = शून्य रीसेट करने के लिए इतना है कि कोई प्रतिनिधियों के बाद कुछ टाइल्स लौटे मिल कहा जाता है मिल गया है।

अद्यतन: यह प्रतिनिधि धारक को छोड़ने से पहले अच्छा अभ्यास (इसे कहीं स्मृति प्रबंधन डॉक्स में है) dealloc में नहीं के बराबर प्रतिनिधियों के लिए है। यह लंबे समय async में चल रहे कार्यों के लिए ऐसा होने से इस तरह की समस्याओं बंद हो जाएगा।

07/09/2009 को 17:35
का स्रोत उपयोगकर्ता

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