Как использовать платформу Three20 для загрузки нескольких изображений и обработки ответа JSON? - PullRequest
4 голосов
/ 12 мая 2010

Итак, у меня есть приложение для iPhone, которое должно:

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

Вопросы:

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

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

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

Ответы [ 2 ]

4 голосов
/ 18 мая 2010

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

- (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. Для опубликованного файла, как я могу включить и имя параметра, и имя файла?
  2. Какова цель установки request.response = для чего бы то ни было? Я не понимаю этого.
1 голос
/ 21 февраля 2011

Ответ № 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 в качестве обработчика, что является простой реализацией, на которую можно обратиться за помощью при написании собственного.

...