2016-04-25 9 views
0

コールバックを使用してNSURLConnection cancelをキャッチすることは可能ですか?NSURLConnectionキャンセルコールバック

私はこのコードこのコールバックだから、ユーザーインターフェイスが正しく更新されない

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    NSLog(@"didReceiveData"); 
if (!cancelled) { 
//this code inside brackets suddenly is calling:(
//not always but from time to time 
    summ += data.length; 
    if (_progressHandler != nil) 
     _progressHandler(data, summ, max); 
} else { 
return; 
} 
} 

前に呼び出されmyUpdateUImessageまでの時間から

-(void) pleaseStopDownload { 
cancelled = YES; 
    [conn cancel]; 
    conn = nil; 
    [self myUpdateUImessage]; 
} 

を使用している場合は!つまり、最終UIは進捗UIよりも表示されます。

EDIT 問題を約

NSOperationQueue *tempQueue = [[NSOperationQueue alloc] init]; 
[conn setDelegateQueue:tempQueue]; 

正しいNSQueueNSOperationQueue *tempQueue = [NSOperationQueue mainQueue];

答えて

2

ありました、それはNSURLConnectionは、コールバックを使用してキャンセルキャッチすることは可能ですか?

公式ドキュメントhereから:

このメソッドが呼び出された後、接続はそれ以上のデリゲートメソッドの呼び出しを行いません。

これは、あなたがcancelを呼び出し、- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)dataがもはや呼び出されると予想されていないため、_cancelled変数に依存しないよう、あなたができるだけ早くUIのクリーンアップを扱うべきであることを意味します。

-(void) pleaseStopDownload { 
    [conn cancel]; 
    conn = nil; 
    [self handleCancelledDownload]; 
} 
:私はアドバイス、キャンセルのコードから クリーンアップメソッドを呼び出すことである何