0

そのため、リモートサーバーに接続してデータを取得して表示しようとしています。をviewDidLoad使用しNSThreadて、という関数を呼び出しますdoSomething

- (void)doSomething
{        
    @autoreleasepool
    {                
        NSMutableURLRequest *httpRequest = [NSMutableURLRequest requestWithURL:someURL];
        [httpRequest setHTTPMethod:@"POST"];
        [httpRequest setValue:[NSString stringWithFormat:@"%d", httpRequestParametersClean.length] forHTTPHeaderField:@"Content-Length"];
        [httpRequest setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
        [httpRequest setHTTPBody:httpRequestParametersClean];

        (void)[[NSURLConnection alloc] initWithRequest:httpRequest delegate:self];

        for (NSString* key in response)
        {
             // loop through returned values
        }
     }
}

のコードviewDidLoad

 [NSThread detachNewThreadSelector:@selector(someURL) toTarget:self withObject:nil];

次にREFRESH、クリックするとdoSomething、単に言うだけで呼び出すボタンがあります[self doSomething]

私の問題は、ビューが読み込まれると、サーバーからの応答が空になることです。更新ボタンをクリックするまで、まだ応答がありません。変!私は何を間違っていますか?

4

1 に答える 1

3

NSURLConnection作成されたは非同期initWithRequest:delegate:的に動作し、データがサーバーから読み取られるときに、デリゲート関数、、...を呼び出します。あなたのコードは接続すらしていないので、とにかく何も起こりません。connection:didReceiveResponse:connection:didReceiveData:start

問題を解決する最も簡単な方法は、同期バージョンを使用することです

sendSynchronousRequest:returningResponse:error:

NSURLConnection。が別のスレッドで実行された場合doSomething、これは UI をブロックしません。

追加:(NSURLConnectionこれについて言及してくれた@geowarに感謝します。)デリゲートベースのメソッドも使用できることに注意してください。これらはより柔軟です (比較については、 https ://stackoverflow.com/a/15591636/1187415 などを参照してください)。もう 1 つの適切な選択肢はsendAsynchronousRequest:queue:completionHandler:、バックグラウンド スレッドを自動的に作成する です。

于 2013-03-31T18:07:11.593 に答える