2009-03-21 9 views
0

imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:srcAddres]];ダウンロード後に通知を受け取るには?

jpegを私のimagedataにダウンロードするには、たとえば2秒かかるので、ダウンロードが完了するまでアクティビティインジケータを表示します。ダウンロードが完了したら、どうすればわかりますか?

答えて

0

:ここでは、Appleのドキュメントです。

次に、あなたがあなたのコントローラ(see this link for more information)に次のメソッドを宣言します。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

ロードが完了すると、デリゲートが呼び出されます。ちなみに、ネットワークアクティビティインジケータを表示するには、次のようなコードを使用できます。

UIApplication* app = [UIApplication sharedApplication]; 
app.networkActivityIndicatorVisible = YES; // to stop it, set this to NO 

ここでも、さまざまなデリゲートがお手伝いします。

0

「セレクタ」と呼ばれるものが必要です。

まだ同期呼び出しを使用することをお勧めしますが、別のスレッドで実行してください。これの背後にある理由は、非同期でも、現在のスレッドでデータを転送する場合でも、UIの遅さの問題が発生するためです。グローバルネットワークアクティビティインジケータを使用している場合、これは問題ではありませんが、アプリ(または他の画面再描画)のローカルインジケータがロックされているように見えます。

したがって、ImageDownloader(またはその他のもの)というクラスを作成し、そこに同期ダウンロードコールを配置して画像データを取得します。あなたのクラスのメンバーの一人として、(インターフェースで)宣言:あなたはこのクラスを作成すると

SEL successSelector; 

(あなたがURLに渡し、あなたの画像データを取り戻すのinit関数を作成したいと言います下記のフォーム(つまり、SELを取り込み)、および使用してそれを呼び出す:

[ImageDownloader alloc] initWithSelector: @"http://url string" :self : @selector(yourFunction:) 

]を

基本的には、ときにその完了コールバックする、オブジェクトを渡す必要があり、そのオブジェクトのメソッド。

「initWithSelector」実装は次のようになります。

-(id) initWithSelector: (NSString*)url :(id)adelegate :(SEL) successSeletor { 
    self.url = url; 
    self.delegate = adelegate; 
    self.sel = successSelector; 
} 

(「yourFunction」の後のコロンに注意してください - あなたはあなたのコールバック関数が持つパラメータごとにコロンが必要です。

のでyourFunctionためsigは次のようになります(ダウンロードが行われたときに)あなたのImageDownloaderクラスからこれを呼び出すには

-(void) yourFunction: (NSData*)imageData; 

、ちょうど使用してセレクターを呼び出します。

[delegate performSelector:sel withObject:imageData]; 

お楽しみください!

関連する問題