Используйте ASIHTTPRequest в качестве ключа NSDictionary - PullRequest
2 голосов
/ 24 июня 2011

Я пытаюсь использовать ASIHTTPRequest/ASIFormDataRequest в качестве ключа в NSDictionary следующим образом:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:GPUserData.userlogin forKey:@"username"];
[request setPostValue:GPUserData.password forKey:@"password"];
[request setDelegate:self];
[_delegates setObject:delegate forKey:request];
[_selectors setObject:[NSValue valueWithPointer:selector] forKey:request];

[request startAsynchronous];

Но он не возвращает правильные данные (nil с или случайные), когдаЯ пытаюсь получить доступ к [_delegate objectForKey:request] из -requestFinished:, поэтому я использую временное решение:

[_delegates setObject:delegate forKey:[request url]];
[_selectors setObject:[NSValue valueWithPointer:selector] forKey:[request url]];

Но [request URL] не уникален для каждого отдельного запроса.Я знаю, что для того, чтобы что-то было жизнеспособным ключом, необходимо, чтобы -hash и -isEqual: возвращали один и тот же результат , т. Е. Если объекты возвращают YES в -isEqual:, то они оба должны возвращатьто же самое с -hash.

с ASIFormDataRequest : ASIHTTPRequest : NSOperation : NSObject Я не вижу метода, который переопределяет -isEqual: или -hash с NSObject и ASIHTTPRequest, реализующий протокол (NSCopying).

Так что же дает?Почему я не могу использовать запрос в качестве ключа?Есть ли какой-то другой уникальный идентификатор для запроса, который я могу использовать?

Любая помощь приветствуется.Для полной справки я пытаюсь реализовать двухуровневый обратный вызов, в котором класс WebServices анализирует данные в -requestFinished (и обрабатывает сетевые ошибки и повторный вход в систему), а затем выполняет другой обратный вызов, чтобы отправлять только данные JSONкак NSDictionary.

1 Ответ

4 голосов
/ 24 июня 2011

Можете ли вы вместо этого сохранить уникальное значение в request.tag или использовать словарь userinfo для хранения данных, которые вам нужно сохранить?например:

request.userInfo = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value", @"key", nil];
...