Domanda

mi ritrovo utilizzando una combinazione di Vars globali e nsrunloop per forzare la sincronizzazione in tutta la mia domanda. Anche se funziona mi sembra un po 'brutto per me. C'è un altro modo per raggiungere lo stesso risultato?

Ecco un tipico esempio:

ParkingSpots *parkingSpots = [[[ParkingSpots alloc] initWithMapViewController:self] autorelease];
        keepRunning = YES;
        NSRunLoop *theRL = [NSRunLoop currentRunLoop];
        while (keepRunning && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);

        UpdateLocation *updatedLocation = [[[UpdateLocation alloc] initWithUserid:@"me" andCoordinate:annotation.coordinate withMapViewController:self]
                                           autorelease];
        NSLog(@"Lat = %f, Long = %f",annotation.coordinate.latitude,annotation.coordinate.longitude);
        [updatedLocation sendUpdate];

In questo codice ho bisogno di aspettare fino a quando le parkingSpots oggetto è completamente inizializzato prima di inizializzare updateLocation. Dal momento che si aspetta updatelocation parkingSpots inizializzazione completa, senza l'updatedlocation runloop non è stato in fase di inizializzazione in modo corretto. Con il tutto runloop funziona come previsto.

Tuttavia, questo sembra molto brutto per me (l'impostazione di un var globale in vari punti nel mio codice). C'è una soluzione più elegante? Grazie in anticipo per il vostro aiuto!

È stato utile?

Soluzione

È possibile utilizzare il modello delegato sulla tua classe ParkingSpots, e chiamare il delegato quando finisce l'inizializzazione. per es.

ParkingSpots *parkingSpots = [[[ParkingSpots alloc] initWithMapViewController:self] autorelease];
parkingSpots.delegate = self;
parkingSpots.didInitialiseSelector = @selector(parkingSpotsInitialised:);
[parkingSpots startLengthyInitialisation];

- (void) parkingSpotsInitialised:(ParkingSpots*)parkingSpots {
  UpdateLocation *updatedLocation = [[[UpdateLocation alloc] initWithUserid:@"me" andCoordinate:annotation.coordinate withMapViewController:self] autorelease];
}

Si potrebbe anche usare le notifiche per ottenere la stessa cosa.

Altri suggerimenti

Penso che avete bisogno di guardare di Objective-C funzione di sincronizzazione .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top