2012-02-10 18 views
14

NSURLConnectionをバックグラウンドモードで実行したいのですが、レスポンスに多くのデータが含まれています。フォーラムでは、didEnterBackgroundで使用するAppleの有限長コーディングを使用するように指示しています。 しかし私はit.insteadそれを避けるためにNSOperationNSInvocationとのコードを使用しますが、それは動作していません。 connectToServerNSURLConnection操作をしています。何か助けてください? didReceiveDatadidReceiveResponseデリゲートメソッドは呼び出されませんか? sendAsynchronousRequestで非同期NSURLConnection with NSOperation

NSOperationQueue *queue = [NSOperationQueue new]; 

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self 
                     selector:@selector(connectToServer) 
                      object:nil]; 

[queue addOperation:operation]; 
[operation release]; 
[queue autorelease]; 

-(void)connectToServer 
{ 
NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
NSURLConnection *theConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self] autorelease]; 

    if(theConnection) 
    { 
     webData = [[NSMutableData data] retain]; 
    } 
    else 
    { 
     NSLog(@"theConnection is NULL"); 
    } 
} 
+0

ご質問が明確ではありません –

+0

私の編集した質問をご覧ください。 – nameless

答えて

42

をiOS5をを必要以上。 iOS 4の操作はセカンダリスレッドで開始されるため、デリゲートは呼び出されません。デリゲートが呼び出される前にスレッドが終了している可能性があります。

メインスレッドで接続を維持し、GCDを使用してバックグラウンドスレッドでデータを処理します。 http://cocoaintheshell.com/2011/04/nsurlconnection-synchronous-asynchronous/

EDIT:更新リンク

はI'vは、ここではすべてこのようなものについて書きました。

+2

私の賞金の前に答える必要があります私のハード得た50 votes.uを楽しむ:) – nameless

+0

あなたはRunloopとポートを停止する方法を教えてくださいできますか? – nameless

+5

[runLoop removePort:ポート用モード:MODE]; CFRunLoopStop(CFRunLoopGetCurrent()); – Nyx0uf

0

ルック:キュー:completionHandler:メソッドがhere in Apple's Documentationを文書化。 NSURLConnectionで非同期要求を許可します。

(注)この質問のこの種のは、無数の時間を頼まれた

+0

私はそれがMACのためだけであることを願っています – nameless

+0

私が持っていた最初のリンクはMac用でした、私はiOS版のためにそれを更新しました。あなたはMacのリファレンスをしたいですか? Macのドキュメントについては、https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/doc/uid/20001697- DontLinkElementID_1 –

+0

私はiOS4でやりたいと思っています。なぜ私の質問に答えてください。 – nameless

6

アップルは、ご希望のものだけを受け取り、NSOperation以内にNSURLConnectionをカプセル化して、1回のリクエストで提供します。QHTTPOperation Appleのsample codeで見つけることができます。

QHTTPOperationは実際にはQRunLoopOperationのサブクラスで、NSOperationの実行ループコールバックに依存するロジックをカプセル化できます。

第三者ASIHTTPRequestは、同様の一般的な解決策であり、AFAIKはもはや維持されません。

関連する問題