IOS в любом случае отправить запрос веб-страницы и забыть об этом на iphone ios? - PullRequest
0 голосов
/ 18 декабря 2010

Я хочу отправить вызов, скажем, www.test.com/updateMySqlTables.php из моего приложения, но я не хочу ждать, пока процесс завершится.

что-то вроде этого звонка

NSString *checkReturn = [NSString stringWithContentsOfURL:checkURL]

Но не хочу ждать возвращения. Я хочу, чтобы мой сервер очистил все старые даты в таблице в фоновом режиме.

Ответы [ 5 ]

1 голос
/ 18 декабря 2010

Я думаю, что все, что вам нужно, это запустить асинхронный запрос и реализовать соответствующий ему requestDidDeceiveData: method и requestDidFinish: method, и оставить эти два метода пустыми, так как вас не волнует ответ, который может сгенерировать запрос. Поскольку он асинхронный, он автоматически запускается в фоновом режиме. Основной поток вашего приложения не будет затронут.

iOS SDK имеет собственный способ отправки асинхронного запроса. Вы также можете использовать для своей работы более известный пакет ASIHTTPRequest, который проще в настройке и мониторинге.

1 голос
/ 18 декабря 2010

Да. Загрузите запрос:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"www.test.com/updateMySqlTables.php"]];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];

И обязательно добавьте соответствующий метод (ы) делегата, который будет вызываться при успехе / ошибке:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
  // Success handling here
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
  // Error handling here
}
0 голосов
/ 18 декабря 2010

Хорошо, теперь, когда тег php был удален, мой ответ больше не является относительным.

//Erase the output buffer
ob_end_clean();
//Tell the browser that the connection's closed
header("Connection: close");

//Ignore the user's abort.
ignore_user_abort(true);

//Extend time limit to 30 minutes
set_time_limit(1800);
//Extend memory limit to 10MB
ini_set("memory_limit","10M");
//Start output buffering again
ob_start();

//Tell the browser we're serious... there's really
//nothing else to receive from this page.
header("Content-Length: 0");

//Send the output buffer and turn output buffering off.
ob_end_flush();
//Yes... flush again.
flush();

//Close the session.
session_write_close();

//Do some work

украдено из: http://andrewensley.com/2009/06/php-redirect-and-continue-without-abort/

0 голосов
/ 18 декабря 2010

Я знаю, что в Linux можно запускать php-скрипт в фоновом режиме.

Полагаю, в некоторых конфигурациях может быть ограничение на использование exec.

exec ("/usr/bin/php yourscript.php >/dev/null &");

, который запускает php-скрипт в фоновом режиме (&) и выводит sneds в никуда (/ dev / null)

0 голосов
/ 18 декабря 2010

Один из способов - загрузить информацию в фоновом потоке, используя executeSelectorInBackground: withObject: или [NSThread detachNewThreadSelector: toTarget: withObject:].И то, и другое потребует от вас создания нового метода для загрузки данных.

...