NSThread内でリクエストを送信したい。

閲覧: 95 回
最初の未読メッセージにスキップ

Ring

未読、
2009/08/31 22:11:332009/08/31
To: iPhone Developer Japan
NSThread内でNSURLRequestを使うとPOSTできません。

調べたら「delegateが取得できないからだ」見たいな記述を見つけたのですが解決策はありませんか?

例:こんな感じのコードです。


- (void)methodA(){
{
[NSThread detachNewThreadSelector:@selector(thread:)
toTarget:self withObject:self];
}

-(void)thread:(id)p
{
NSMutableURLRequest *_request = [[[NSMutableURLRequest alloc] init]
autorelease];
[_request setURL:[NSURL URLWithString:url]];
[_request
setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
[_request setTimeoutInterval:20];
[_request setHTTPShouldHandleCookies:FALSE];
[_request setHTTPMethod:@"POST"];
if (postString) {
[_request setHTTPBody:[postString
dataUsingEncoding:NSUTF8StringEncoding]];
}
NSURLConnection *connection = [[NSURLConnection alloc]
initWithRequest:_request delegate:self];
}

munehiro

未読、
2009/09/03 0:28:012009/09/03
To: iPhone Developer Japan
Ring さん

- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate
は非同期なリクエストを発行するメソッドです。
なので、これを使っていれば
[NSThread detachNewThreadSelector:@selector(thread:)
toTarget:self withObject:self];
と新しいスレッドを作成する意味はありません。たぶん、リクエストの応答が返ってこなくなります。

また、
[NSThread detachNewThreadSelector:@selector(thread:)
toTarget:self withObject:self];
を使いたいなら
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request
returningResponse:(NSURLResponse **)response error:(NSError **)error
のような同期のリクエストを送るメソッドを使うことになります。
あと新しいスレッドでは
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[pool release];
をお忘れなく。

越智

Ring

未読、
2009/09/03 2:31:312009/09/03
To: iPhone Developer Japan

越智さん

なかなかできなくて困っていましたが、そういうことだったんですね。
うまく実装することができました。
ありがとうございます。
全員に返信
投稿者に返信
転送
新着メール 0 件