Как установить NSURLConnection Delegate для NSURL - PullRequest
1 голос
/ 02 августа 2011

Приложение для iPhone отправляет сообщение на сервер через HTTP-сообщение.Я хотел бы использовать NSURLConnection Delegate по нескольким причинам.

Вот код.Что я должен сделать, чтобы заставить его использовать делегата?

//.h
#import <Foundation/Foundation.h>

@interface ServerConnection : NSObject <NSURLConnectionDelegate>

-(NSData*) postData: (NSString*) strData;

//delegate method
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;

@end

и .m (важная часть - второй метод)

//.m

#import "ServerConnection.h"

@implementation ServerConnection

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    return self;
}

-(NSData*) postData: (NSString*) strData //it's gotta know what to post, nawmean?
{

    //postString is the STRING TO BE POSTED
    NSString *postString;

    //this is the string to send
    postString = @"data=";
    postString = [postString stringByAppendingString:strData]; 

    NSURL *url = [NSURL URLWithString:@"//URL GOES HERE"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]];

    //setting prarameters of the POST connection
    [request setHTTPMethod:@"POST"];
    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request addValue:msgLength forHTTPHeaderField:@"Content-Length"];
    [request addValue:@"en-US" forHTTPHeaderField:@"Content-Language"];
    [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
    [request setTimeoutInterval:20.0];

    NSLog(@"%@",postString);

    NSURLResponse *response;
    NSError *error;

    //this sends the information away. everybody wave!
    NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    return urlData;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
//delegate
{
    NSLog(@"connectionDidFinishLoading!!!");
}

@end

Опять вопрос:сделать, чтобы использовать его делегат?Мне нужно знать, когда я закончу с соединением.

В качестве дополнительного примечания я использую ARC, чтобы вы не беспокоились об управлении моей памятью.;)

Ответы [ 2 ]

4 голосов
/ 02 августа 2011

Вы используете синхронный API, поэтому, когда метод возвращает соединение, соединение уже завершено.Вам нужен делегат, только если вы используете асинхронный API, который вы можете использовать с любым из +connectionWithRequest:delegate:, –initWithRequest:delegate: или –initWithRequest:delegate:startImmediately:.

4 голосов
/ 02 августа 2011

Метод sendSynchronousRequest: не использует делегата.

Посмотрите на connectionWithRequest: делегат:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...