Oggi ho riscontrato un problema strano quando stavo cercando di "generalizzare" le mie "operazioni di importazione CoreData". Sembra che se creo una sottoclasse generica di NSOperation, la funzione main()
non verrà chiamata.La sottoclasse NSOperation generica perde la funzionalità NSOperation
semplice esempio:
class MyOperation<T: NSObject>: NSOperation {
override func main() {
println("My operation main was called")
}
}
Se si crea un'istanza di questa classe e aggiungerlo alla operationQueue
si vedrà che è main()
non è effettivamente chiamato.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.operationQueue = NSOperationQueue()
let operation = MyOperation<NSString>()
self.operationQueue!.addOperation(operation)
}
Operazione transita semplicemente ready
-executing
e finished
stato senza chiamare main()
.
Se rimuovo l'annotazione generica <T: NSObject>
dalla classe MyOperation
funzionerà correttamente.
Com'è possibile? Mi manca qualcosa qui?
Grazie per chiarimenti. È triste che non possiamo usare una tecnica così potente in Swift con Objective-C. In questo caso particolare, le operazioni "generalizzate" potrebbero aiutare a riutilizzare un bel po 'di codice. Bene sì. :/ – Nevs12