Question

Je souhaite que mon application télécharge des données à partir d'Internet, dans la documentation du SDK pour iPhone J'ai trouvé la classe NSURLConnection, utilisée pour le téléchargement, ai-je raison? J'ai écrit le même code que dans la documentation et je l'ai exécuté. La connexion a été créée avec succès, mais aucune donnée n'a été téléchargée. connectionDidFinishLoading est lancé après une seconde ou deux, mais aucune donnée dans le résultat. Le problème est que cette méthode didRecieveData n'est jamais déclenchée. Je ne sais pas pourquoi, j'ai cherché sur Internet, mais chaque résultat était le même code que dans la documentation. Pourriez-vous donner un conseil s'il vous plaît? Merci pour chaque réponse Le code source de ma classe de téléchargeur est ci-dessous.

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];
}
Était-ce utile?

La solution

Vous avez mal épelé "recevoir":

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

// Correct signature
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;

Autres conseils

Vous avez une faute de frappe dans le nom de votre méthode didReceiveData (i avant e, sauf après c: -)

Ainsi, il semblera que votre classe n'implémente pas ce sélecteur (facultatif) et sera ignorée en silence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top