2010-05-12 1 views
4

Поэтому у меня есть приложение iPhone, который должен:Как использовать рамки Three20 для загрузки нескольких изображений и обработки ответа JSON?

  1. сообщение несколько строк и до 5 изображений (хранящимися в памяти) для веб-приложения RoR
  2. Разбираем JSON возвращенного, который будет включать в себя несколько строк и массив URL-адресов (каждый из которых представляет местоположение, где загруженные изображения можно найти на веб-сайте).

ВОПРОСЫ:

  1. Может ли это быть сделано с Three20 (было бы хорошо, поскольку я использую его для других вещей)? И если да, то как?

  2. Если это невозможно сделать с помощью Three20 ... как это будет выполнено с использованием ASIHttpRequest? Или, может быть, что-то запекло в SDK, если это лучший вариант?

Спасибо большое

ответ

4

К сожалению, есть не много учебников и хорошей документации для Three20 там в Интернете ... так вот как я, наконец, получил вещи работать:

- (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]; 

} 

Вещи, которые я до сих пор не понимают (или найти проблематично):

  1. Для публикуемую файла, как я могу включать и пункт m name И имя файла?
  2. Какова цель установки request.response = на что? Я этого не понимаю.
1

Ответ # 2: Вы должны поставить обработчик для ответа, прежде чем отправить запрос, TTURLJSONResponse не фактический ответ, но он отвечает за обработку ответа. Здесь вы обработаете ответ для своих строк и массива URL-адресов.

Это действительно протокол, называемый TTURLResponse, который определяет следующий метод для реализации:

/** 
* 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; 

Вы выбрали TTURLJSONResponse как обработчик, который является прямолинейной реализацией, чтобы посмотреть на помощь в написании самостоятельно.