ios - AFURLSessionManager里监听事件为什么要判断object是否是NSURLSessionDownloadTask
PHP中文网
PHP中文网 2017-04-17 17:47:39
0
1
266
  • (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级讲师

répondre à tous(1)
PHPzhong

NSURLSessionTask est en fait un cluster de classe. La tâche générée par NSURLSession ne renvoie pas nécessairement le type de tâche spécifié. Par conséquent, kindOfClass ne prend pas toujours effet. Pour plus de détails, veuillez vous référer à la description de AFURLSessionManager.m dans la méthode de chargement.
Spécifique au problème actuel, c'est parce que la classe de base de __NSCFURLSessionDownloadTask sur iOS 7 n'est pas __NSCFURLSessionTask, donc isKindOfClass générera une erreur. Vous pouvez le découvrir en consultant le commit correspondant.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal