#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) кажется правильным, но как бы я это сделал? спасибо 🙂