iPhone SDK: Как отправить данные на сервер через Интернет? - PullRequest
1 голос
/ 18 июля 2010

я написал gps-приложение для iphone, и все работает нормально, но теперь я хочу отправить широту и долготу на сервер через Интернет, используя самый простой способ ... У меня есть URL с сервера, на которомЕсть параметры для широты и долготы.Также я хочу лат.и долго.отправлять каждые 90 секунд или около того.Как именно все это делается?Любая помощь очень ценится, спасибо заранее!

Ответы [ 2 ]

4 голосов
/ 18 июля 2010
NSURL *cgiUrl = [NSURL URLWithString:@"http://yoursite.com/yourscript?yourargs=1"];
NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:cgiUrl];

/* leave the rest out if just issuing a GET */
NSString *postBody = @"yourpostbodyargs=1";

NSString *contentType = @"application/x-www-form-urlencoded; charset=utf-8";
int contentLength = [postBody length];

[postRequest addValue:contentType forHTTPHeaderField:@"Content-Type"];
[postRequest addValue:[NSString stringWithFormat:@"%d",contentLength] forHTTPHeaderField:@"Content-Length"];
[postRequest setHTTPMethod:@"POST"];
[postRequest setHTTPBody:[postBody dataUsingEncoding:NSUTF8StringEncoding]];
/* until here - the line below issues the request */

NSURLConnection *conn = [NSURLConnection connectionWithRequest:postRequest delegate:self];

обработка ошибок и полученных данных с использованием:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // data has the full response
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    contentLength = [response expectedContentLength];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)newdata
{
    [data appendData:newdata];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}

вам нужно настроить некоторые переменные, такие как data, contentLength и т. Д. Но это общий план взаимодействия http.

Возможно, вы захотите поместить все элементы обработки в отдельный класс обработчика, я изменил делегат на self, чтобы он был более автономным.

Что касается времени, используйте NSTimer для вызова публикацииданные каждые 90 секунд:

[NSTimer scheduledTimerWithTimeInterval:90 target:self selector:@selector(xmitCoords) userInfo:nil repeats:YES];
1 голос
/ 18 июля 2010

Я думаю, что приведенный выше ответ имеет правильную идею - но попробуйте использовать ASIHTTPRequest .Отличная библиотека, которая абстрагирует весь этот грязный HTTP-код из вашей программы.

Еще одна вещь, которую стоит отметить - координаты GPS каждые 90 секунд очень быстро разряжают вашу батарею - вы просто делаете этодля тестирования?

...