ios - AFURLSessionManager里监听事件为什么要判断object是否是NSURLSessionDownloadTask
PHP中文网
PHP中文网 2017-04-17 17:47:39
0
1
265
  • (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary<NSString ,id> )change context:(void )context {

       if ([object isKindOfClass:[NSURLSessionTask class]] || [object isKindOfClass:[NSURLSessionDownloadTask class]]) {
           if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) {
               self.downloadProgress.completedUnitCount = [change[@"new"] longLongValue];
           } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesExpectedToReceive))]) {
               self.downloadProgress.totalUnitCount = [change[@"new"] longLongValue];
           } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) {
               self.uploadProgress.completedUnitCount = [change[@"new"] longLongValue];
           } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesExpectedToSend))]) {
               self.uploadProgress.totalUnitCount = [change[@"new"] longLongValue];
           }
       }
       else if ([object isEqual:self.downloadProgress]) {
           if (self.downloadProgressBlock) {
               self.downloadProgressBlock(object);
           }
       }
       else if ([object isEqual:self.uploadProgress]) {
           if (self.uploadProgressBlock) {
               self.uploadProgressBlock(object);
           }
       }

    }

在第一行判断object时,已经判断了是否是NSURLSessionTask,为什么还要判断或是否是NSURLSessionDownloadTask,NSURLSessionDownloadTask不是已经是NSURLSessionTask的子类了么?

PHP中文网
PHP中文网

认证0级讲师

全員に返信(1)
PHPzhong

NSURLSessionTask は、実際にはクラス クラスターです。NSURLSession によって生成されたタスクは、必ずしも指定されたタスク タイプを返すわけではありません。したがって、kindOfClass が常に有効になるわけではありません。詳細については、load メソッド内の AFURLSessionManager.m の説明を参照してください。
現在の問題に特有の原因は、iOS 7 の __NSCFURLSessionDownloadTask の基本クラスが __NSCFURLSessionTask ではないため、isKindOfClass がエラーになることです。対応するコミットを確認するとわかります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート