Pergunta

Encontro -me usando uma combinação de vars globais e nsrunloop para forçar a sincronização por toda a minha aplicação. Embora funcione, parece um pouco feio para mim. Existe alguma outra maneira de alcançar o mesmo resultado?

Aqui está um exemplo normalmente:

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

Neste código, preciso esperar até que o objeto de estacionamentos seja completamente inicializado antes de inicializar a atualização. Como o UpdatElocation espera que os estacionamentos sejam totalmente inicializados, sem que o Runloop o atualizado não estivesse inicializando corretamente. Com o Runloop, tudo funciona conforme o esperado.

No entanto, isso parece muito feio para mim (definindo um VAR global em vários pontos do meu código). Existe uma solução mais elegante? Agradeço antecipadamente por sua ajuda!

Foi útil?

Solução

Você pode usar o padrão de delegado em seu ParkingSpots aula e ligue para o delegado quando terminar de inicializar. por exemplo

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

Você também pode usar notificações para alcançar a mesma coisa.

Outras dicas

Eu acho que você precisa olhar para o Objective-C's recurso de sincronização.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top