2011-06-24 7 views
2

私がようにNSDictionaryの中のキーとしてASIHTTPRequest/ASIFormDataRequestを使用しようとしてるよう:使用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秒またはランダム)ときに私を-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から同じものを返す必要があることがわかります。私はNSObjectASIHTTPRequestから-isEqual:または-hashをオーバーライドするいかなる方法を見ることができないASIFormDataRequest : ASIHTTPRequest : NSOperation : NSObjectから

(NSCopying)プロトコルを実装しています。

だから何ですか?要求をキーとして使用できないのはなぜですか?私が使用できるリクエストには、他にも一意の識別子がありますか?

何か助けていただければ幸いです。完全なリファレンスとして、WebServicesクラスがデータを解析して-requestFinished(ネットワークエラーと再ログインを処理)し、別のコールバックを作成してJSONデータがNSDictionaryとして送信されるような二重層コールバックを実装しようとしています。

+0

これは問題の鍵ですか? 'セレクタ 'とは何ですか? –

+0

@Josh Caswell、セレクタは '@selector(methodOnDelegate:)'です。それはうまく表示され、私が '[request url]' –

答えて

4

代わりに、一意の値をrequest.tagに格納するか、userinfo辞書を使用して保存する必要があるデータを保存できますか?例:

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

WOWを使用すると動作します。私は 'userInfo'について知らなかった。ありがとう!!私は今、馬鹿だと感じる。 –

関連する問題