2016-09-03 2 views
2

У меня есть расширение NSURLSessionDownloadTask, внутри этого расширения я создал хранимое свойство с именем 'id', используя Objective C Associated Objects. Когда я пытаюсь установить свойство, я получаю «непризнанный селектор, отправленный экземпляру». Вот мой код ниже:Swift: Сохраненные свойства в расширениях непризнанное исключение выбора

extension NSURLSessionDownloadTask { 

    private struct AssociatedKeys { 
    static var id: String? 
    } 

    var id: String? { 
    get { 
     return objc_getAssociatedObject(self, &AssociatedKeys.id) as? String 
    } 
    set { 
     if let newValue = newValue { 
     objc_setAssociatedObject(self, &AssociatedKeys.id, newValue as String?, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 
     } 
    } 
    } 
} 

Позже;

let task = session.downloadTaskWithURL(url) 
task.id = identifier 

ответ

1

Я не могу полностью объяснить это, но проблема, кажется, что session.downloadTaskWithURL(url) возвращает экземпляр некоторого внутреннего подкласса __NSCFLocalDownloadTask.

Если вы определили расширение как расширение NSURLSessionTask вместо NSURLSessionDownloadTask

extension NSURLSessionTask { ... } 

тогда он работал в моем тесте.

Смежные вопросы