Pergunta

Estou tendo um problema em fazer um sendSynchronousRequest falha. Ele só falha depois de tentar obter a geolocalização atual e o usuário acerta "não permitir". E isso acontece apenas em 3.1.2. (Até onde eu sei. Funciona bem em 3.0.1.)

Aqui está o que eu faço:

Eu configurei um aplicativo de teste muito básico, que quase não tem nada. Dentro applicationDidFinishLaunching Eu adiciono uma chamada à minha função, teste, que está aqui:

- (void) test
{
 CLLocationManager *mLM;

 mLM = [[CLLocationManager alloc] init];
 mLM.delegate = self;

 if ( [mLM locationServicesEnabled] )
 {
  [mLM startUpdatingLocation];
 }
}

Meus métodos de delegado também são bem simples:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
 [manager stopUpdatingLocation];
 [self sendRequest]; // succeeds
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
 [manager stopUpdatingLocation];
 [self sendRequest]; // fails
}

Finalmente, aqui está o meu sendrequest:

- (void) sendRequest
{
 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
 [request setURL:[NSURL URLWithString:@"https://theurl"]];  // this is actually a valid URL, changed here for privacy
 [request setHTTPMethod:@"GET"];
 [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];

 NSString    *unpw   = @"username:password";
 NSString    *base64 = [NSString base64StringFromString:unpw];
 [request addValue:[NSString stringWithFormat:@"Basic %@", base64] forHTTPHeaderField:@"Authorization"];

 NSURLResponse *response = nil;
 NSError    *error = nil;
 NSData    *respdata = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

 [request release];
}

A chamada para sendSynchronousRequest pendura. Isso tem sido muito frustrante. Alguém tem alguma idéia?

Foi útil?

Solução

Isso vai funcionar, é mágico. Certifique -se de que o MLM seja a sua classe varialble, para que você possa:

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
 [self.mLm release];
 self.mLM = [[CLLocationManager alloc] init];
 self.mLM.delegate = nil;

 [self sendRequest]; // fails - This time it will work!!!
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top