NSUrlConnection для подключения REST API - XCode 4.2 для iOS4 и iOS 5 - PullRequest
3 голосов
/ 29 февраля 2012

Я занимаюсь разработкой приложения, ориентированного как минимум на iOS4, с использованием XCode 4.2. Никогда раньше этого не делал, и это мой первый месяц разработки приложения для iPhone.

Я провел некоторое исследование и наткнулся на ASIHTTPRequest - который не поддерживается, и даже разработчик предложил использовать что-то еще: http://allseeing -i.com /% 5Brequest_release% 5D ;

Из этого списка я подумал, почему бы не использовать NSUrlConnection, поскольку он встроен в XCode. Я знаю, что RESTKit кажется довольно популярным, но я слышал, что его установка немного громоздка - и мне здесь не нужно ничего сложного, просто подключение к службам REST API, которое возвращает JSON, поэтому у меня есть ощущение, что NSURLConnection более чем достаточно .

Не совсем уверен, как это сделать, особенно потому, что я нацеливаюсь на iOS4 и iOS5, и, насколько я понимаю, в iOS 5 SDK представлен NSURLConnectionDelegate (не уверен, насколько они отличаются?).

Первоначально я следил за этой статьей https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html. Но у меня есть некоторые сомнения, так как это четко сказано сверху: библиотека разработчика MAC OSX, а не библиотека разработчика iOS.

Может кто-нибудь указать мне правильное направление? Какие-нибудь примеры или учебники?

1 Ответ

5 голосов
/ 01 марта 2012

Я нашел похожую статью, как и выше, но для iOS Developer Library (не MAX OSX one), и они очень похожи (или вполне могут иметь одинаковое содержимое). https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-BAJEAIEE Это то, что я сделал в конце, а не реализовал NSURLConnectionDelegate.

Это сочетается с JSONKit после этого урока: http://www.techtraits.com/jsonkit/ делает всю работу за меня.

Одно слово предостережения: мне нужно отключить ARC, поскольку JSONKit не поддерживает его в данный момент.

Примеры:

- (IBAction)callRest:(id)sender {
    NSURL *url = [NSURL URLWithString:@"http://www.example.com/Person/123"];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];                                
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

    if(connection) {
        responseData = [[NSMutableData alloc] init];
    } else {
        NSLog(@"connection failed");
    }

}

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [responseData appendData:data];
    JSONDecoder *decoder = [[JSONDecoder alloc] initWithParseOptions:JKParseOptionNone];
    NSDictionary* json = [decoder objectWithData:responseData];
    if(json != nil)
    {
        NSLog(@"First Name %@", [json objectForKey:@"FirstName"]);
        NSLog(@"Last Name %@", [json objectForKey:@"LastName"]);
    }
}

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    [connection release];

    [responseData release];

    NSLog(@"connection error");
}

- (void) connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"connection success");
}

Также я должен объявить responseData, как показано в файле .h

@property (retain, nonatomic) NSMutableData *responseData;

И в файле .m:

@synthesize responseData;
...