Как выполнять разные действия в зависимости от ASIHTTPRequest?

#cocoa-touch #ios #ios4

#cocoa-touch #iOS #ios4

Вопрос:

Я использую ASIFormDataRequest для загрузки изображения в TwitPic, и я получаю ответ, отсюда все в порядке. Но на - (void)requestFinished:(ASIHTTPRequest *)request у меня уже есть действие для ответа TwitLonger (который работает правильно). Теперь, как бы мне выполнить другое действие в зависимости от типа ответа? Я попытался задать строку и сравнить с if , получив последнюю часть ответа, но безуспешно. Именно так я и пытался:

 - (void)requestFinished:(ASIHTTPRequest *)request
{
    NSString *responseString = [request responseString];

    NSString *first = [responseString substringFromIndex: [responseString length] - 7];
    NSLog(@"%@", first);
    if (first == @"</rsp>" 
        ) {
        NSString *responseString = [request responseString];
        NSLog(@"%@", responseString);
        NSString *result = nil;
        // Determine "<div>" location
        NSRange divRange = [responseString rangeOfString:@"<mediaurl>" options:NSCaseInsensitiveSearch];
        if (divRange.location != NSNotFound)
        {
            // Determine "</div>" location according to "<div>" location
            NSRange endDivRange;

            endDivRange.location = divRange.length   divRange.location;
            endDivRange.length   = [responseString length] - endDivRange.location;
            endDivRange = [responseString rangeOfString:@"</mediaurl>" options:NSCaseInsensitiveSearch range:endDivRange];

            if (endDivRange.location != NSNotFound)
            {
                // Tags found: retrieve string between them
                divRange.location  = divRange.length;
                divRange.length = endDivRange.location - divRange.location;

                result = [responseString substringWithRange:divRange];
            }
            tweet.text = resu<
            NSLog(@"%@", result);
        }
    } else {

    // Use when fetching text data
    NSString *responseString = [request responseString];
    NSLog(@"%@", responseString);
    NSString *result = nil;
        // Determine "<div>" location
        NSRange divRange = [responseString rangeOfString:@"<content>" options:NSCaseInsensitiveSearch];
        if (divRange.location != NSNotFound)
        {
            // Determine "</div>" location according to "<div>" location
            NSRange endDivRange;

            endDivRange.location = divRange.length   divRange.location;
            endDivRange.length   = [responseString length] - endDivRange.location;
            endDivRange = [responseString rangeOfString:@"</content>" options:NSCaseInsensitiveSearch range:endDivRange];

            if (endDivRange.location != NSNotFound)
            {
                // Tags found: retrieve string between them
                divRange.location  = divRange.length;
                divRange.length = endDivRange.location - divRange.location;

                result = [responseString substringWithRange:divRange];
            }
            tweet.text = resu<
            [_engine setAccessToken:token];
            [_engine sendUpdate:tweet.text];
            [self.parentViewController dismissModalViewControllerAnimated:true];
        }
    }
}
  

И это пример ответа:

 <?xml version="1.0" encoding="UTF-8"?>
<rsp stat="ok">
 <mediaid>50ia96</mediaid>
 <mediaurl>URL GOES HERE</mediaurl>
</rsp>
  

Итак, в конечном итоге, я хочу получить URL-адрес между тегами.

Заранее спасибо!

Ответ №1:

Перейдите к их документации и прокрутите вниз до раздела «Успешная обработка и сбой для нескольких запросов в методах делегирования». Они предоставляют вам три альтернативы — в большинстве случаев достаточно установить словарь userInfo при выполнении запроса, а затем просто прочитать его в своих обратных вызовах и предпринять надлежащие действия. Немного быстрого кода:

установите это при создании и запуске запроса:

 request.userInfo = [NSDictionary dictionaryWithObjectsAndKeys: @"firstRequestId", @"id", nil];
  

а затем в ваших обратных вызовах:

 if([[request.userInfo objectForKey:@"id"] isEqualToString:@"firstRequestId"]) {
  // Handle the request with id 'firstRequestId'
}
  

Комментарии:

1. Спасибо за ссылку! Я думаю, что первый вариант (userInfo) кажется правильным, но как бы я это сделал? спасибо 🙂