2010-05-12 5 views
4

J'ai donc une application iPhone qui doit:Comment utiliser le framework Three20 pour télécharger plusieurs images et gérer la réponse JSON?

  1. Poster plusieurs chaînes et jusqu'à 5 images (en mémoire) pour une application web RoR
  2. Parse le JSON est revenu qui comprendra plusieurs chaînes et un tableau d'URL (chacun représentant l'emplacement où les images téléchargées peuvent être trouvées sur le site Web).

QUESTIONS:

  1. cela peut-il être fait avec Three20 (serait bien puisque je l'utilise pour d'autres choses)? Et si oui, comment?

  2. Si cela ne peut pas être fait avec Three20 ... comment cela se ferait-il en utilisant ASIHttpRequest? Ou peut-être quelque chose cuit dans le SDK si c'est une meilleure option?

Merci beaucoup

Répondre

4

Malheureusement il n'y a pas beaucoup de tutoriels et une bonne documentation pour Three20 là-bas sur le web ... donc voici comment j'ai finalement eu des choses de travail:

- (void) sendToWebsite { 

    NSString* url = [[NSString stringWithFormat:kRequestURLPath, self.entityId] stringByAppendingString:@".json"] ; 

    // Prep. the request 
    TTURLRequest* request = [TTURLRequest requestWithURL: url delegate: self]; 
    request.httpMethod = @"POST"; 
    request.cachePolicy = TTURLRequestCachePolicyNoCache; 

    // Response will be JSON ... BUT WHY DO I NEED TO DO THIS HERE??? 
    request.response = [[[TTURLJSONResponse alloc] init] autorelease]; 

    // Set a header value 
    [request setValue:[[UIDevice currentDevice] uniqueIdentifier] forHTTPHeaderField:@"Device-UID"]; 

    // Post a string 
    [request.parameters setObject:self.entity_title forKey:@"entity_title"]; 

    // Post some images 
     for (int i = 0; i < [self.photos count]; i++) { 
     // IS IT POSSIBLE TO ADD A PARAM NAME SO I CAN LOOK FOR THE SAME NAME 
     // IN THE WEB APPLICATION REGARDLESS OF FILENAME??? 
     [request addFile:UIImagePNGRepresentation([self.winnerImages objectAtIndex:i]) 
       mimeType:@"image/png" 
       fileName:[NSString stringWithFormat:@"photo_%i.png", i]]; 
    } 

     // You rails guys will know what this is for 
     [request.parameters setObject:@"put" forKey:@"_method"]; 

     // Send the request 
    [request sendSynchronously]; 

} 

choses que je ne comprends toujours pas (ou trouve problématique):

  1. Pour un fichier posté, comment puis-je inclure un paragraphe m nom ET un nom de fichier?
  2. Quel est le rôle de la définition de request.response = à quoi? Je ne comprends pas ça.
1

Répondre # 2: Vous devez fournir le gestionnaire pour la réponse avant d'envoyer votre demande, le TTURLJSONResponse n'est pas la réponse réelle, mais il est responsable de la gestion de la réponse. C'est ici que vous traitez la réponse pour vos chaînes et votre tableau d'URL.

Il est vraiment un protocole appelé TTURLResponse qui définit la méthode suivante pour la mise en œuvre:

/** 
* Processes the data from a successful request and determines if it is valid. 
* 
* If the data is not valid, return an error. The data will not be cached if there is an error. 
* 
* @param request The request this response is bound to. 
* @param response The response object, useful for getting the status code. 
* @param data  The data received from the TTURLRequest. 
* @return NSError if there was an error parsing the data. nil otherwise. 
* 
* @required 
*/ 
- (NSError*)request:(TTURLRequest*)request 
      processResponse:(NSHTTPURLResponse*)response 
      data:(id)data; 

Vous avez choisi TTURLJSONResponse comme gestionnaire, qui est une mise en œuvre simple pour regarder l'aide sur la rédaction de votre propre.

Questions connexes