1

NSURLConnectionのデリゲートメソッドを持つサーバークラスがあります。そして、NSMutableURLRequestをサーバークラスに送信するSendRequestという名前の別のクラスがあります。サーバークラスでは、2つのメソッドが呼び出されます

- (void)executeAsync:(NSMutableURLRequest)urlRequest timeOutInterval:(int)timeOut
{
    _urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];];
}

- (void)executeSync:(NSMutableURLRequest)urlRequest
{
    NSData* respData = [NSURLConnection sendSynchronousRequest:urlRequest                        returningResponse:&response error:&error];

}

ここまではすべて正常に機能します。デリゲートメソッドを呼び出しているSendRequestクラスから上記のexecuteAsyncメソッドを呼び出すことができます。

ここで、SendRequestクラスに新しいメソッドを追加しました。このメソッドは、ServerクラスのexecuteRequestメソッドを呼び出します。

- (void)executeRequest:(NSMutableURLRequest)urlRequest
{
    _urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];];
}

今回は閉じ込められました。executeRequestメソッドが呼び出されていますが、URL要求の処理中にデリゲートメソッドを呼び出していません。私はここで何時間も打たれています。

すべてが正しいようです。以前と同じ方法でurlRequestを送信しています。しかし、なぜそれが機能しないのかわかりません。遠慮なくコメントしてください、でも助けてください。本当に心配です

編集 :

サーバーにリクエストを投稿して、レスポンスを取得する必要があります。同期を試してみると、正常に動作していますが、メインスレッドがブロックされています。それが私が非同期に行く理由です。デリゲートメソッドを使用して、応答データを取得しようとしています。

4

3 に答える 3

1

あなたのシステムの説明は投稿されたコードと一致していないと思います、そしてそれはあなたが説明した問題を説明しています。SendRequestクラスは、サーバー要求を実行するためにServerクラスに依存する必要があります。

SendRequestクラスが接続デリゲートをselfに設定しているようです。これらのデリゲートメソッドはすべてServerクラスに実装されていると思います。

あなたの説明が示唆したことをやってみてください...

// SendRequest.m

- (void)executeRequest:(NSMutableURLRequest)urlRequest
{
    // however you get ahold of your server...
    Server *myServer = [Server sharedInstance];

    // let it do the work.  it has the delegate methods
    [myServer executeAsync:urlRequest];
}

または、SendRequestコードをそのままにして、デリゲートをServerクラスのインスタンスに設定することもできます(ここでも、デリゲートメソッドが実装されていると仮定します)。サーバーはすでにリクエストを開始する方法を知っているので、この2番目のアイデアはもっと悪いと思います。

于 2012-05-04T15:00:47.443 に答える
-1

やっと解決しました。これが誰かを助けることを願っています。コードをクリーンアップしてメソッドを適切に宣言し、最後にクラスのオブジェクトを作成するときに、initwithDelegate:selfを使用する必要があります。そして最後に、NSURLConnectionデリゲートメソッドが呼び出されます。

于 2012-05-14T07:14:10.503 に答える
-1

NSURLConnectionDelegateを.hに設定します

次に、.m関数で次のコードを実行します

NSURLConnection *connection = [[NSURLConnection alloc] 
                                initWithRequest:request
                                       delegate:self startImmediately:NO];

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                      forMode:NSDefaultRunLoopMode];
[connection start];
于 2014-06-26T05:31:26.283 に答える