Sorun haritaya birden ek açıklamalar ekleyerek

oy
1

Tamam, bu yüzden bu sorun yaşıyorum. Ne yapmak istediğiniz bir haritaya birden açıklamaları manuel olarak ekleyin olduğunu. Sadece bir ek açıklama eklediğinizde, sorunsuz çalışır. pim damla, onun ek bilgiyi görmek için üzerine tıklayabilirsiniz, hayat güzel.

Ben birden fazla eklemek istediğinizde sorun geliyor. Ben ikincisini eklediğinizde, aniden pim en (yani belli bir renk olmalıdır onların büyüklüğüne bağlı olarak, ama ikisi de şimdi aynıyız ...) düzgün renkli değildir ve daha da önemlisi onların üzerine tıkladığınızda, onların görmek çizgisi, uygulama exex_bad_access çöker. Gerçekten sorunun ne fikri, belki haritaya Çok sayıda görüntüleme ekliyorum var? Ama sadece 9 pin var ve pimleri kendilerini gayet ekleyin. İşte benim kod ...

    - (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;
}

Hatta ikinci işlevi çıkarmadan çalıştı, ama hiçbir şey yapmadı.

Yardım için teşekkürler! PS Ben de notuna tıklayın çalışır 9 takım bir ya da iki pin genellikle var, eklemek gerekir ...

Ben bile programda elle manuel olarak sadece iki ek açıklamaları denerseniz (yani döngü kaldırmak), hala başarısız olur ve renk hala yanlış ...

Oluştur 17/08/2009 saat 18:49
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
1

Sizin bellek yönetimi gibi görünmektedir stopsdeğişken yanlıştır. Daha sonra dönüş değeri ile o diziyi değiştirin kesilebilir bir dizi tahsis -[Bus returnStops]o bırakın. Ayrıca birlikte neler olduğunu açık değil bus2etmez - -[Bus initWithStop:]bir dönüş farklı örneğini Bus? Bu herhangi bir yöntemi göndermek normal değil -init*halihazırda başlatıldı nesne üzerinde. Ben muhtemelen Kakao Touch bellek yönetim kuralları tarafından karıştı olduğunu düşünüyorum. İşte makale ve diğer referansların bir koleksiyon var Kakao bellek yönetimi konusunda (aynı canavar).

Cevap 17/08/2009 saat 18:55
kaynak kullanıcı

oy
0

SO cevap ben init nesnesi BUS1 göndermeyi sürdürdü olduğunu, bu yüzden karıştı.

"Merhaba David,

Kişisel veri modeli bana ıslatılacağız görünüyor. için: Sadece art arda initWithStop gönderiyor bir otobüs nesnesi var.

Bu yardımcı olur umarım.

İyi şanslar! "

Yardımlarınız için teşekkürler çocuklar! Hepiniz bana biraz yardım etti!

Cevap 17/08/2009 saat 20:02
kaynak kullanıcı

oy
0

Bir bellek yönetim problemi demezdim - Sadece yanlış dizi başvuruları kullandığınız söyleyebilirim.

NSMutableArray * ile dizi inşa durdurur sonra = [[NSMutableArray alloc] init], bir sonraki adım kullanmaktır [AddObject durur:] Her saklamak istediğiniz durdurmak ekleyin.

Daha sonra? Gerçekten yapmaya çalıştıkları ne olduğu belli değil.

Cevap 17/08/2009 saat 19:34
kaynak kullanıcı

oy
0

Eğer yerine ek açıklama eklemek AddAnnotations kullanmayı denediniz mi? - (void) addAnnotations: (NSArray *) ek açıklamalar. Bu sizin için çalışacak ... ancak yukarıda cevap ve daha fazla denetim size viewDidLoad bazı bellek yönetimi sorunlar yaşıyorsanız bakarak (ti senin sorunun nedeni olmayabilir s gerçi ama olabilir) olabilir. Önce dizi (durak) tahsis ve ardından Otobüs nesnesindeki bazı diziyle ovveriding edilir, bu bir sızıntısına neden olur. Ayrıca o zaman buna bir başvuru sayısı arttırılmış olmadan kanalların Otobüs nesnesi aslında dizi bırakmadan beri çökmesine neden olabileceğini dizi yeniliyor. Ben initWithStop yapıyor ama initWithStop nesneyi tutar eğer burada da bir sızıntı almak ne olabileceğini emin değilim.

Cevap 17/08/2009 saat 18:56
kaynak kullanıcı

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