2011-06-24 31 views
2

我试图使用ASIHTTPRequest/ASIFormDataRequest如在NSDictionary的关键是这样:使用ASIHTTPRequest作为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 S或随机的),当我尝试从-requestFinished:中访问[_delegate objectForKey:request],所以我使用的是作为一个临时解决方案:

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

[request URL]是不是每个单独的请求是唯一的。我知道的东西是一种可行的关键,it needs to have -hash and -isEqual: return the same result,即如果该对象返回YES-isEqual:那么他们必须都来自-hash返回相同。

ASIFormDataRequest : ASIHTTPRequest : NSOperation : NSObject我可以看到没有方法从NSObjectASIHTTPRequest覆盖-isEqual:-hash实现(NSCopying)协议。

那么是什么原因?为什么我不能将请求用作关键字?是否还有其他可供我使用的请求的唯一标识符?

任何帮助表示赞赏。对于完整的参考,我想实现双级回调,其中WebServices类解析上-requestFinished数据(并处理网络错误并重新登录),然后让另一个回调所以只是JSON数据被发送作为NSDictionary

+0

你确定这是这就是问题的关键?什么是“选择器”? –

+0

@Josh的Caswell,是的,选择器是'@selector(methodOnDelegate:)'。它精细显示出来,当我用'[URL请求]' –

回答

4

你能而不是唯一的值保存到request.tag,或使用用户信息的字典来存储你需要存储的数据?例如:

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

WOW的作品。我不知道'userInfo'。谢谢!!我现在感到很傻。 –

相关问题