Как выполнять разные действия в зависимости от ASIHTTPRequest? - PullRequest
1 голос
/ 21 мая 2011

Я использую 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 = result;
            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 = result;
            [_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 Ответ

1 голос
/ 21 мая 2011

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

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

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

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

if([[request.userInfo objectForKey:@"id"] isEqualToString:@"firstRequestId"]) {
  // Handle the request with id 'firstRequestId'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...