2008-12-01 10 views
3

je droit un cas limite impair maintenant en ce qu 'un code de réponse à partir d'un procédé de délégué NSURLConnection:NSURLConnection et le code de réponse de traitement et les données de réponse

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; 

est déclenchée avant que la méthode de délégué subséquent:

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

Mon code pourrait certainement utiliser l'amélioration car en ce moment, il vérifie le code de réponse HTTP à partir de ce qui précède, puis appelle une méthode pour prendre des mesures. Malheureusement, à ce moment-là, les données ne sont pas encore disponibles.

Quelles sont les solutions élégantes pour coupler le response et la responseData de façon que ma méthode classes ne se déclenche pas jusqu'à ce que le responseet le responseData sont 200 + pas nil. Ai-je besoin de définir les deux comme variables d'instance de classe? On dirait la solution d'un pauvre.

Répondre

8

La réponse avant les données est correcte. En fait, vous devriez effacer toutes les données de cette méthode (au cas où vous recevriez plusieurs réponses par le biais de redirections et que toutes les données intermédiaires seraient obsolètes).

Vous recevez une connexion: didReceiveResponse: un message vous informant qu'un en-tête de réponse a été reçu mais que cela se produit avant tout le contenu du corps.

Si vous avez besoin d'accéder à tous les éléments de la réponse, il vous suffit de stocker la réponse et les données et de les gérer dans connectionDidFinishLoading: (ou si vos données sont longues, vous pouvez gérer incrémentalement: didReceiveData :).

Questions connexes