У меня очень странная проблема с асинхронным http-запросом:
Я отправляю запрос на сервер, который задерживает его на 10 секунд, а затем отправляет ответ.
В порядкечтобы не блокировать программу, я делаю это асинхронно.если я просто вызываю метод (через NSThread) - он не работает.Я предполагаю, что это потому, что поток умирает до его завершения (сервер ждет 10 секунд).если я вызываю метод и использую CFRunLoopRun () - он действительно работает, но тогда вся программа перестает работать на 10 секунд.Мой вопрос заключается в том, как я могу заставить поток прожить достаточно времени и при этом не блокировать запуск программы.конечно, есть вариант, что у меня есть ошибка в моем коде, которая вызывает все это, поэтому я публикую все соответствующие части.
это основной поток:
self.MessagesList=[[MessagesArray alloc] init];
[NSThread detachNewThreadSelector:@selector(backgroundMethod) toTarget:self withObject:nil];
-(void)backgroundMethod
{
[self.MessagesList updateFromServer];
CFRunLoopRun(); //the method dies without this line
}
и это запрос:
-(void)updateFromServer{
NSLog(@"method called");
responseData = [NSMutableData data];
NSURLRequest *request =
[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:8000/messages/views/new_messages/"]];
NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(!connection) {
NSLog(@"connection failed :(");
} else {
NSLog(@"connection succeeded :)");
}
}
, а responseData определяется следующим образом:
@property (nonatomic,strong) NSMutableData *responseData;
Я также попытался выполнить executeSelectorInBackground вместо NSThread и даже вызвать updateFromServer без какого-либо из нихи результаты были одинаковыми.
Я работаю с ARC - может быть, это как-то связано с этим?
Мне действительно нужно это решить, и я не знаю, как, поэтомуЯ буду рад, если вы мне поможете.
спасибо