Класс соединения, реализующий NSURLConnectionDataDelegate - PullRequest
0 голосов
/ 09 июля 2009

Я хотел бы спросить вас о NSURLConnection в объективе-c для iPhone.

У меня есть одно приложение, которое необходимо подключить к одному веб-сервису для получения данных (о видео на YouTube), Затем у меня есть все, что мне нужно для подключения (аналогично примеру кода Hello_Soap в Интернете).

Но теперь моя проблема в том, что я создаю класс (наследующий от NSObject) с именем Connection, и я реализовал методы: didReceiveResponse, didReceiveData, didFailWithError и connectionDidFinishLoading. Также метод:

-(void)Connect:(NSString *) soapMessage{
    NSLog(soapMessage);

    NSURL *url = [NSURL URLWithString:@"http://....."];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];


    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

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

    if( theConnection )
    {
        webData = [[NSMutableData data] retain];
    }
    else
    {
        NSLog(@"theConnection is NULL");
    }
}

Но когда из моего AppDelegate я создаю один Connection объект:

Connection * connect = [[Connection alloc] Init:num]; //It's only one param to test.
[connect Connect:method.soapMessage];

И я вызываю этот метод, когда он заканчивается, он не продолжает вызывать didReceiveResponse, didReceiveData, didFailWithError или connectionDidFinishLoading. Я пытаюсь это сделать, но пока не могу.

Я хотел бы иметь возможность вызывать этот класс «Соединение» каждый раз, когда я хочу получать данные (после этого они будут проанализированы и отображены в UITableView с).

Спасибо.

1 Ответ

0 голосов
/ 10 июля 2009

Начальная точка, которую я бы изучил, - не называть свой класс "Connect". В Objective-C нет пространств имен, и с таким общим именем, как «Соединение», возможно, другие классы с тем же именем вызывают проблемы.

Соглашение заключается в добавлении нескольких символов, связанных с проектом или вашей компанией, поэтому, например, если ваш проект называется Amazing Thing, вы можете вместо этого назвать класс "ATConnector". Вы можете выделить имя класса в файле .h и использовать команду меню «Refactor», чтобы легко изменить его и исправить другие ссылки.

Также, если вы освобождали класс Connect или NSURLconnection после вызова, это привело бы к эффекту, который вы наблюдаете, когда не вызывается ни один метод делегата, но это трудно определить по присутствующему коду.

...