NSURLConnection не вызывает метод didRecieveData - PullRequest
2 голосов
/ 22 июня 2009

Я хочу, чтобы мое приложение загружало некоторые данные из Интернета, в документации iPhone SDK я нашел NSURLConnection класс, который используется для загрузки, я прав? Я написал тот же код, что и в документации, и запустил его. Соединение было успешно создано, но данные не были загружены. connectionDidFinishLoading запускается через секунду или две, но без данных в результате. Проблема в том, что метод didRecieveData никогда не запускается. Я не знаю почему, я искал в Интернете, но каждый результат был такой же код, как и в документации. Не могли бы вы дать совет, пожалуйста? Спасибо за каждый ответ Мой исходный код класса загрузчика ниже.

Downloader.h

@interface Downloader : NSObject {
    NSURLConnection *conn;

    //Array to hold recieved data
    NSMutableData *recievedData;
}

@property (nonatomic, retain) NSURLConnection *conn;
@property (nonatomic, retain) NSMutableData *recievedData;

- (void)downloadContentsOfUrl:(NSURL *)url;

@end

Downloader.m

#import "Downloader.h"
@implementation Downloader
@synthesize recievedData, conn;

- (void)connection:(NSURLConnection *)connection didRecieveResponse:(NSURLResponse *)response
{
    NSLog(@"did recieve response");

    [recievedData release];
    recievedData = nil;
}

- (void)connection:(NSURLConnection *)connection didRecieveData:(NSData *)data
{
    NSLog(@"did recieve data");
    //Append the new data to the recieved data
    [recievedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    //Release the connection and the data object
    [connection release];
    [recievedData release];

    NSLog(@"Connection failed! Error - %@ %@", [error localizedDescription],
          [[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //ToDo with data
    //[recievedData writeToFile:@"data" atomically:YES];
    NSLog(@"downloaded");
    NSLog(@"%u", [recievedData length]);
    //Release the connection and the data object
    [connection release];
    [recievedData release];
}

- (void)downloadContentsOfUrl:(NSURL *)url
{
    //Create the connection
    //Create the request
    NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:url 
            cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

        //Create the connection with the request and start loading the data
    conn =  [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self 
                startImmediately:YES];
    if(conn)
    {
        //Create the NSMutableData that will hold the recieve data
        recievedData = [[NSMutableData data] retain];
        NSLog(@"Connection success!");
    }
    else
    {
        NSLog(@"Can't download this file!");
    }       
}

- (void)dealloc
{
    [conn release];
    [recievedData release];

    [super dealloc];
}

Ответы [ 2 ]

3 голосов
/ 22 июня 2009

Вы ошиблись "получить":

// Your signature
- (void)connection:(NSURLConnection *)connection didRecieveData:(NSData *)data;

// Correct signature
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
0 голосов
/ 22 июня 2009

У вас есть опечатка в имени вашего метода didReceiveData (я до e, кроме как после c: -)

Таким образом, будет выглядеть, что ваш класс не реализует этот (необязательный) селектор, и он будет игнорироваться.

...