SendsynchroousRequest falha em 3.1.2 Após a busca de localização de “não permitir”
-
13-09-2019 - |
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?
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!!!
}