私は、非同期のHTTP要求に非常に奇妙な問題を抱えている:Objective Cの - 非同期HTTP要求ブロックプログラム
私は10秒で、それを遅延し、応答を送信し、サーバに要求を送信します。
プログラムをブロックしないために、私は非同期で行います。 (NSThreadを介して)メソッドを呼び出すだけであれば、動作しません。私はそれが終了する前にスレッドが死んでいると仮定します(サーバーは10秒間待機します)。 メソッドを呼び出してCFRunLoopRun()を使用すると、実際には動作しますが、プログラム全体が10秒間動作を停止します。 私の質問は、スレッドを十分な時間だけ稼働させ、プログラムの実行をブロックしないようにする方法です。 もちろん、私は自分のコードに間違いがあり、そのすべてを引き起こすオプションがあるので、関連するすべての部分を公開します。
これはメインスレッドである:
self.MessagesList=[[MessagesArray alloc] init];
[NSThread detachNewThreadSelector:@selector(backgroundMethod) toTarget:self withObject:nil];
-(void)backgroundMethod
{
[self.MessagesList updateFromServer];
CFRunLoopRun(); //the method dies without this line
}
、これは要求である:
-(void)updateFromServer{
NSLog(@"method called");
responseData = [NSMutableData data];
NSURLRequest *request =
[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:8000/messages/views/new_messages/"]];
NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(!connection) {
NSLog(@"connection failed :(");
} else {
NSLog(@"connection succeeded :)");
}
}
responseDataは、以下のように定義されている間:
@property (nonatomic,strong) NSMutableData *responseData;
Iはまた、代わりperformSelectorInBackgroundを試しNSThreadのうちのどれかを使わずにupdateFromServerを呼び出しても、その結果同じ。
私はARCと一緒に作業しています - おそらくそれと関係がありますか?
私は本当にそれを解決しなければならないし、方法がわからないので、あなたが私を助けてくれれば嬉しいです。
おかげ
なぜスレッドを使用していますか? NSURLConnection'を非同期的に使用するスレッドは必要ありません –
何をお勧めしますか? updateFromServerをそのまま呼び出してみましたが、何も変更されていません。要求が非同期でない可能性がありますか? –
多分あなたは 'updateFromServer'でブロックしている何か他のことをしています - ここからはわかりません –