Цель C https запрашивает, не ожидая ответа, прежде чем возобновить основной поток - PullRequest
0 голосов
/ 02 мая 2018

У меня проблема с моими запросами https (я полагаю, что это проблема). Моя проблема в том, что у меня есть страница входа в систему, которая просит веб-службу php, которую я написал, проверить, может ли пользователь, который пытается войти, сделать это. Запрос HTTPS работает нормально при запуске приложения из XCode, но после проверки Apple, я опубликовал приложение в App Store, но почему-то, когда я загружаю его из App Store, приложение зависает, когда я нажимаю кнопку входа в систему, которая запускает запрос ...

Вот код моего запроса:

NSString *url = [NSString stringWithFormat:@"https://cataloguetest.tabuleo.fr/Appmobile/webServ_firstCo.php?username=%@",username];
__block BOOL endOfBlock = false;
__block NSArray *ret;
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"GET"];
[request setURL:[NSURL URLWithString:url]];

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:
  ^(NSData * _Nullable data,
    NSURLResponse * _Nullable response,
    NSError * _Nullable error) {

      NSString *strData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
      NSLog(@"Data received: %@", strData);
      NSError *jsonerror;
      NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonerror];
      NSString *validity =[jsonDict objectForKey:@"valid"];
      NSLog(@"get validity ok..");
      NSString *userInbase = [jsonDict objectForKey:@"usrIn"];
      NSLog(@"validity: %@",validity);
      NSLog(@"inBase: %@", userInbase);
      ret = @[validity ,userInbase];
      endOfBlock = true;
  }] resume];
while (!endOfBlock) {};

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 июня 2018

Хорошо, мне удалось найти почти идеальный способ сделать это:

NSString *urlCheck = [NSString stringWithFormat:@"YOUR URL"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setHTTPMethod:@"POST"];
[request setURL:[NSURL URLWithString:urlCheck]];
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:
^(NSData * _Nullable data,
NSURLResponse * _Nullable response,
NSError * _Nullable error) {
  //do things with request's return
}] resume];

while(!postRequestReturned){

[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate          distantFuture]];

}
NSLog(@"REQUEST resumed main thread");
...