iPhone: загрузка данных асинхронно с NSURL-запросом, в отличие от [NSData datawithContents ofURL] - PullRequest
1 голос
/ 16 мая 2011

Привет, я новичок, и я пытаюсь загрузить данные геокодирования с веб-страницы googleapi.Я сделал это с помощью: code:

        NSMutableString *urlStr = [[NSMutableString alloc] initWithString:temp];
        NSMutableString *address = [[NSMutableString alloc] initWithString:l.Address];
        [address appendString:@" "];
        [address appendString:l.CityName];
        [address appendString:@" "];
        [address appendString:l.State];
        [address appendString:@" "];
        [address appendString:l.PostalCode];
        NSArray *addressArray = [address componentsSeparatedByString:@" "];
        [address release];
        NSString *a = [addressArray componentsJoinedByString:@"+"];
        [urlStr appendString:a];
        [urlStr appendString:@"&sensor=false"];
        NSURL *url = [[NSURL alloc] initWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        NSData *data = [NSData dataWithContentsOfURL:url];

Это работало нормально, но проблема заключалась в том, что он заблокировал мой графический интерфейс, поскольку все это было сделано синхронно.

Кто-то предложил мне сделать это асинхронно, используяNSURLrequest.Итак, я пошел на сайт Apple.оттуда я увидел их пример.Тем не менее, я все еще застрял.Как преобразовать приведенный выше код, являющийся синхронным запросом, в асинхронный?Пока это то, что у меня есть, но я не уверен, что это работает ...... немного смущен ... может кто-нибудь, пожалуйста, укажите мне правильное направление с этим кодом?

        NSURL *url = [[NSURL alloc] initWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        //create NSURL request for asynchronous processing
        NSURLRequest *theRequest = [NSURLRequest requestWithURL:url
                                                  cachePolicy:NSURLRequestUseProtocolCachePolicy
                                              timeoutInterval:60.0];

        NSURLConnection *theConnection= [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

        if (theConnection) 
           {
            receivedData = [[NSMutableData data] retain];
           }
        else
           {
            // Inform the user that the connection failed.
           }

1 Ответ

0 голосов
/ 16 мая 2011

Использование NSURLConnection

В зависимости от того, как вы структурируете свой код, вы захотите действовать или уведомлять какой-либо другой объект (делегат, уведомление) об успешном завершении (connectionDidFinishLoading :) или об ошибке (connection: didFailWithError:).

...