Probléma, amelyen több kommentárok térképének

szavazat
1

Ok, így érzem magam ezt a problémát. Amit akarok, hogy manuálisan hozzá több kommentárokat a térképet. Amikor hozzá csak egy magyarázat, akkor hibátlanul működik. A pin csepp, akkor kattints rá, hogy lássa a kiemelő, az élet jó.

A probléma akkor jön, amikor szeretnék, hogy adjunk több, mint egy. Amikor hozzá a második, hirtelen a pin-ek nem színezett helyesen (azaz attól függően, hogy mértékük kell őket egy bizonyos színt, de ők most mind ugyanaz ...), és ami még fontosabb, ha rájuk kattint, hogy azok kiemelő, az alkalmazás összeomlik exex_bad_access. Tényleg nincs ötlete, mi a baj, talán adok hozzá túl sok kilátás nyílik a térkép? De ez csak a 9 csapok és a csapokat magukat hozzá, csak finom. Itt a kód ...

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

is próbált eltávolítjuk a második funkció, de nem csinál semmit.

Köszönöm a segítséget! PS Még azt is hozzá, ott általában egy vagy két csap ki a 9 ami működik, ha rákattint a kommentár ...

Ha én is megpróbálja kézzel csak két kommentárok kézzel a programban (azaz, távolítsa el a hurok), de még mindig nem működik, és a színek még mindig rossz ...

A kérdést 17/08/2009 18:49
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
1

Úgy tűnik, hogy a memória kezelése a stopsváltozó hibás. Kiosztani a változékony tömb, akkor cserélje ki a tömbben a visszatérési értéke -[Bus returnStops], majd engedje, hogy. Szintén ez nem világos, hogy mi folyik a bus2- nem -[Bus initWithStop:]tér vissza a másik példánya Bus? Ez nem a szokásos küldeni minden olyan módszer -init*egy már inicializált objektumot. Úgy gondolom, hogy talán vannak zavarodva a memória kezelése egyezmények Cocoa Touch. Itt egy gyűjteménye cikkek és az egyéb hivatkozásokat a Cocoa memória kezelése (ami ugyanaz fenevad).

Válaszolt 17/08/2009 18:55
a forrás felhasználó

szavazat
0

Így a válasz az volt, hogy küldözgette autobuszok1 az init tárgy, ezért összezavarodott.

"Szia David,

Adatait modell úgy néz ki, megöntözzük nekem. Csak egy busz objektum, amit ismételten küldő initWithStop: a.

Remélem ez segít.

Sok szerencsét! "

Köszönöm srácok a segítséget! Ti mind segített egy kicsit!

Válaszolt 17/08/2009 20:02
a forrás felhasználó

szavazat
0

Én nem nevezném a memória probléma kezelésére - Én csak azt mondják használ tömb referenciák helytelenül.

Kialakítása után a tömb NSMutableArray * megáll = [[NSMutableArray alloc-] init], a következő lépés az, hogy az [megáll addObject:] vegyen fel minden megáll a tárolni kívánt.

Utána? Ez nem világos, amit igazán akar csinálni.

Válaszolt 17/08/2009 19:34
a forrás felhasználó

szavazat
0

Próbáltad AddAnnotations helyett adjunk kommentár? - (void) addAnnotations: (NSArray *) jelölések. Ez a munka az Ön ... de nézi a választ a fenti kérdésre, és további vizsgálatra akkor némi memória gazdálkodás kérdésekben a viewDidLoad (bár thi s lehet, hogy nem az oka a probléma, de lehet). Először akkor elosztásának array (megálló), majd ovveriding azt néhány tömböt az Bus tárgy, ez szivárgást okoz. Továbbá akkor majd elengedve, hogy tömböt, ami okozza a baleset, mert akkor elengedi a tömb valójában a busz tárgy w NÉLKÜLI miután nőtt a számlálóját rá. Nem vagyok biztos benne, mi initWithStop csinál, de lehet, hogy egyre szivárgást itt is, ha initWithStop megtartja az objektumot.

Válaszolt 17/08/2009 18:56
a forrás felhasználó

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