IOS 5.0: la NSURLConnection funciona pero devuelve Null antes de completar

Tengo un file de class llamado funciones donde mantengo tareas repetitivas. Una de las funciones allí se llama GetPrice, que se conecta a un service web XML, analiza el XML y devuelve un object CarPrice. Todo funciona muy bien hasta que llega el momento de devolver el object CarPrice. Es NULL aunque en mi connectionDidFinishLoading, el object no es nulo.

Aquí está mi function GetPrice:

-(CarPrice*)GetPrice:(NSString *)m { NSString *url =[@"http://myUrl.com"]; dataWebService = [NSMutableData data]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString: url]]; NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; [conn start]; return mp; //mp is declanetworking as a CarPrice in the @interface section of my funcs class //when it gets returned here it is NULL even though....(see below) } //Connection Functions======================= -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ [dataWebService setLength:0]; } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [dataWebService appendData:data]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSString *responseString = [[NSString alloc] initWithData:dataWebService encoding:NSUTF8StringEncoding]; ParserMetal *pmr = [ParserMetal alloc]; mp = [pmr parseMetal:responseString]; //at this point, the mp is fully populated //an NSLOG(@"%@", mp.displayPrice); here will show that the mp object is populated //however as stated above, when it returns, it is null. } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"Error during Connection: %@", [error description]); } //End Connection Functions ================== 

Es el return mp; ¿Pasando antes de que se llene el mp? ¿Necesito usar una connection síncrona aquí para asegurarme de que los datos se llenan antes de la devolución?

Si entiendo correctamente su código, llamará a GetPrice:m: y luego iniciará la connection desde allí. Después de iniciar la connection utilizando [connection start] , devuelve inmediatamente mp .

Esto significa que la connection se inició, pero antes de que haya recibido todos sus datos, ya regresa mp . Debe esperar a que se reciban los datos y, a continuación, devolver mp .

Podría usar un método síncrono para esto, o podría implementar un método en su class principal, que se llamará desde la connectionDidFinishLoading:connection: method, definido en su 'otro file de class'. Me gusta esto:

  • Iniciar connection
  • Recibir datos…
  • Llama [mainClass didReceiveAllData:mp]

Espero que esto ayude.