addAnnotations kérdés (memória kezelése talán?)

szavazat
1

Én némi probléma MKMapView / megjegyzések / UINavigationController. Alapvetően sikerül nézeteimet egy UINavigationController; az egyik nézet tartalmaz egy MKMapView és én hozzá kommentárokat rajta (10-200) a addAnnotations módszerrel.

Minden jól működik, kivéve egy dolgot: ha én navigálni „túl gyors” én UINavigationController, az iPhone szimulátor összetörik, amelyhez a „EXC BAD ACCESS” jelet. Például, ha én betölteni Álláspontom tartalmazó MKMapView és azonnal nyomja meg a „Vissza” gomb a UINavigationController navigációs sáv, én kap a jelet. Rájöttem, hogy a probléma a addAnnotations módszer: amikor a MKMapView betöltődik, hozzáteszem kommentárokat, de úgy néz ki, mint minden kész aszinkron. Ha várok, mint a második előtt nyomja meg a „Vissza” gombot, értem nincs hiba, de ha én vagyok túl gyors, összeomlik. Kapok nincs hiba egyáltalán, ha leveszem a addAnnotations sort. Azt hiszem, azért, mert véleményem szerint felszabadul a UINavigationController ELŐTT addAnnotations módszer van a munkát.

Minden jó megoldás erre? Nem akarom, hogy a felhasználó várni (megjelenítésével terhelési nézet például); Azt hiszem, a megoldás lehet a jobb memóriakezelés, de én nem értem, hogyan tudnám ezt.

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

Ez a példa, én kap a „Hozzáadás helyjelzőket: kész” üzenetet, mielőtt bármi is megjelennek a térképen.

A kérdést 07/09/2009 17:31
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
5

Futottam ugyanaz a probléma, vagy hiba, és találtam egy megoldást a blogbejegyzést .

Láthatjuk, hogy amit látsz, az ugyanaz, mint a kérdés utáni nézi a hibakereső stack trace.

A kérdés az az oka, a MapViewController (a szülő MKMapView) már dealloc'd és aszinkron térkép lekérése belsõ MKMapView igyekszik felhívni a küldötte MKMapView (ami MapViewController).

Szóval, dealloc a MapViewController, muszáj, hogy állítsa vissza a MKMapView.delegate = nulla, így nem küldöttek neveztek néhány cserép kap vissza.

UPDATE: ez jó gyakorlat (ez valahol a memória kezelése docs) nullára küldöttek dealloc kiadása előtt a megbízott birtokosa. Ez leállítja a problémákat, mint ez ne történjen meg a hosszú futás aszinkron feladatokat.

Válaszolt 07/09/2009 17:35
a forrás felhasználó

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