2012-05-04 16 views
1

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

- (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]; 

} 

すべてはここまで正常に動作と呼ばれる2つのメソッドを持っています、私は、デリゲートメソッドを呼び出しているのsendRequestクラスから上記executeAsyncメソッドを呼び出すことができています。

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

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

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

すべてが正しいようですが、前に送信していたのと同じ方法でurlRequestを送信しています。しかし、私はなぜそれが動作していないのか分からない。お気軽にコメントしてください。でも助けてください。私は本当に心配しています

EDIT:

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

+0

を次のコードを実行し、その後、あなたの.hにNSURLConnectionDelegate

を設定し、[スタート_urlConnection]。あなたはどこかでそれをやっていると思いますか? – SteveB

+0

私は自分の質問を編集しました。それを確認してください – Perseus

+0

彼はstartImmediatelyオプションを使用しています。 –

答えて

-1

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

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コードをそのままとどまるが、再びサーバ・クラス(のインスタンスにデリゲートを設定することができます....あなたの説明が提案何やってみデリゲートメソッドが実装されています)。私はこの第2の考えが悪いと思う。なぜなら、サーバーは既に要求を開始する方法を知っているからだ。

+0

実際には、大きなurlRequestを準備しています。なぜ、試作品を投稿したのですか?ええ、あなたは正しいです。 2番目のアイデアは悪いです。実は同じexecuteAsyncメソッドを再度呼び出すことを試みました。呼び出していますが、代理メソッドは呼び出されません。だから私はそれのための新しいメソッドを作成した、私はexecuteRequestを意味する – Perseus

+0

オブジェクトでチェックしても、すべてが完璧です。 – Perseus

+0

もう一度私の質問を確認してください、私は最後に私が何をしようとしていることを述べました。 – Perseus

-1

はここにあなたのコードは、実際にあなたが呼び出していることを示していない.M機能に

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

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
         forMode:NSDefaultRunLoopMode]; 
[connection start]; 
関連する問題