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

У меня есть массив, который включает URL-адреса каналов JSON. Я использую ASIHTTPRequest, чтобы загрузить канал и обработать его. Каждый канал содержит несколько записей или объектов JSON. request загружает данные, выбирает только один объект и сохраняет его.

URL-адреса каналов выглядят следующим образом: http: www. * .com / id.json, где id - некоторая строка. После загрузки данных и выбора объекта я хотел бы сохранить идентификатор в словаре в качестве ключа, который сопоставляется со значением загруженного объекта.

Как я могу передать эту строку с запросом? Так, например:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.tag = 3;
[request setDelegate:self];
[request startAsynchronous];

Теперь в requestFinished я могу идентифицировать этот запрос следующим образом: if (request.tag == 3. Вместе с tag из 3, я хотел бы отправить ID. Так что я могу сделать что-то с этим в if (request.tag == 3). Есть ли какое-либо свойство, где я могу передать строку или любые данные вместе с запросом?

1 Ответ

3 голосов
/ 21 августа 2011

Вы можете передать свой собственный словарь данных в свойство userInfo, которое, подобно свойству tag, может быть прочитано обратно по запросу после получения ответа.

NSString* jsonId = @"1234";
request.userInfo = [NSDictionary dictionaryWithObject:jsonId forKey:@"id"];

См. документация .

Если вам нужно обработать успех и неудачу по многим различным типам запроса, у вас есть несколько вариантов:

  1. Если вашВсе запросы имеют одинаковый широкий тип, но вы хотите различать их, вы можете установить свойство userInfo NSDictionary каждого запроса с вашими собственными данными, которые вы можете прочитать в ваших законченных / неудачных методах делегата.Для более простых случаев вы можете вместо этого установить свойство тега запроса.Оба эти свойства предназначены для вашего собственного использования и не отправляются на сервер.

  2. Если вам нужно обрабатывать успех и неудачу совершенно по-разному для каждого запроса, установите разныеsetDidFinishSelector / setDidFailSelector для каждого запроса


Если вы хотите опубликовать данные, как веб-страница публикует форму, вы можете использовать подкласс ASIFormDataRequest.Это позволяет очень легко отправлять POST-запросы со строками, которые вы добавляете по отдельности:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"Ben" forKey:@"first_name"];
[request setPostValue:@"Copsey" forKey:@"last_name"];

См. Документацию .

...