iPhone NSURLConnection: connectionDidFinishLoading - comment retourner une chaîne de caractères à l'appel de la méthode

J'ai passé en revue similaire stackoverflow questions/réponses à cela, mais je suis toujours perplexe.

Je suis un débutant et j'ai vraiment du mal avec cette. Avec l'iPhone, je peux télécharger XML à partir d'une URL, mais je ne peut pas stocker la chaîne de résultat dans un NSString variable et voir à partir de la fonction appelante.

J'ai les déclarations suivantes en mesure à la classe:

@interface comms : NSObject {
    NSString *currURL, *receivedString;
    NSMutableData *receivedData;
    NSURLConnection *conn;
}

@property (copy, readwrite) NSString *currURL;
@property (copy, readonly) NSString *receivedString;
@property (nonatomic, assign) NSMutableData *receivedData;
@property (nonatomic, assign) NSURLConnection *conn;

-(void) getContentURL;

J'ai la méthode suivante dans les comms de la classe:

-(void) getContentURL
{
    NSLog( @"Begin getContentURL." );

    //Request data related.
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] 
                                    autorelease];
    [request setURL:[NSURL URLWithString: currURL]];

    //Content-Type related.
    [request setValue:@"application/x-www-form-urlencoded" 
   forHTTPHeaderField:@"Content-Type"];

    //Create Connection.
    conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (conn) {
        //The connection was established.
        receivedData = [[NSMutableData data] retain];
        NSLog( @"Data will be received from URL: %@", request.URL );
    }
    else
    {
        //The download could not be made.
        NSLog( @"Data could not be received from: %@", request.URL );
    }

    //PROBLEM - receivedString is NULL here.
    NSLog( @"From getContentURL: %@", receivedString );
}

J'ai créé les délégués dans les comms de la classe comme suit:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:
    (NSURLResponse *)response
{
    //Discard all previously received data.
    [receivedData setLength:0];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:
(NSData *)data
{
    //Append the new data to the receivedData.
[receivedData appendData:data];     
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //Connection succeeded in downloading the request.
    NSLog( @"Succeeded! Received %d bytes of data", [receivedData length] );

    //Convert received data into string.
    receivedString = [[NSString alloc] initWithData:receivedData 
        encoding:NSASCIIStringEncoding];
    NSLog( @"From connectionDidFinishLoading: %@", receivedString );

    //release the connection, and the data object
    [conn release];
    [receivedData release];
}

Je peux générer avec succès la receivedString chaîne à l'aide de NSLog dans le connectionDidFinishLoading délégué.

    //Convert received data into string.
    receivedString = [[NSString alloc] initWithData:receivedData 
        encoding:NSASCIIStringEncoding];
    NSLog( @"From connectionDidFinishLoading: %@", receivedString );

Cependant, quand je suis sortie de la receivedString chaîne dans le getContentURL c'est nul (et donc aussi la valeur null à partir de la ViewController.m classe que j'appelle les comms classe).

    //PROBLEM - receivedString is NULL here.
    NSLog( @"From getContentURL: %@", receivedString );

Des idées sur comment je peux voir la valeur de receivedString dans getContentURL et de la ViewController.classe m?

OriginalL'auteur | 2010-02-12