2016-09-03 5 views
2

NSURLSessionDownloadTaskの拡張機能があります。この拡張機能の中で、Objective C Associated Objectsを使用して 'id'という名前のストアドプロパティを作成しました。プロパティを設定しようとすると、「インスタンスに送信された認識できないセレクタ」が表示されます。以下は私のコードです: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のインスタンスを返すことのようです。

あなたの代わりにNSURLSessionDownloadTask

extension NSURLSessionTask { ... } 

NSURLSessionTask の延長として拡張を定義する場合、それは私のテストで働いていました。

関連する問題