Pregunta

Me encuentro con una combinación de VARs globales y nsrunloop forzar la sincronización a través de mi solicitud. Aunque funciona parece un poco feo para mí. ¿Hay alguna otra forma de lograr el mismo resultado?

Esto es un típico ejemplo:

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];

En este código tengo que esperar hasta que los parkingSpots objeto es completamente inicializado antes de inicializar UpdateLocation. Desde UpdateLocation espera parkingSpots a ser totalmente inicializados, sin la updatedlocation runloop no se inicializa correctamente. Con la runloop todo funciona como se esperaba.

Sin embargo, esto se ve muy feo para mí (el establecimiento de un var mundial en varios puntos en mi código). ¿Hay una solución más elegante? Gracias de antemano por su ayuda!

¿Fue útil?

Solución

Se podría utilizar el patrón de delegado de su clase ParkingSpots, y llamar al delegado cuando termina la inicialización. por ejemplo.

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

También es posible usar las notificaciones a lograr lo mismo.

Otros consejos

Creo que hay que buscar en casa de Objective-C característica de sincronización .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top