Die generische NSOperation-Unterklasse verliert die NSOperation-Funktionalität

8

Heute habe ich ein seltsames Problem gefunden, als ich versuchte, meine CoreData-Importoperationen zu "generalisieren". Es scheint, dass wenn ich eine generische Unterklasse von NSOperation erstelle, der main() func nicht aufgerufen wird.

Einfaches Beispiel:

%Vor%

Wenn Sie eine Instanz dieser Klasse erstellen und zu operationQueue hinzufügen, sehen Sie, dass main() nicht wirklich aufgerufen wird.

%Vor%

Der Vorgang wird einfach von ready nach executing und in den Zustand finished umgeleitet, ohne dass main() aufgerufen wird.

Wenn ich die generische Annotation <T: NSObject> von MyOperation class lösche, funktioniert es gut.

Wie ist das möglich? Fehle ich hier etwas?

    
Nevs12 29.09.2014, 10:20
quelle

3 Antworten

7

Das Problem wird durch diese einfache Regel verursacht:

  

Methode in einer generischen Klasse kann nicht in Objective-C

dargestellt werden

Dies führt dazu, dass MyOperation bei der Überbrückung zu Objective-C wie rein aussieht und keine Methoden außer Kraft gesetzt werden, NSOperation subclass.

Sie können diesen Fehler sehen, indem Sie override func main() mit @objc attribute markieren.

%Vor%     
rintaro 29.09.2014, 16:50
quelle
12

Problemumgehung: Sie können NSOperation-Unterklasse (kein generisches) erstellen, main überschreiben und Sie eigene 'execute' -Funktion aufrufen, die von generischen Unterklassen überschrieben werden kann. Beispiel:

%Vor%     
Topal Sergey 11.02.2015 10:24
quelle
1

In Xcode 7 wurde die generische NSOperation korrigiert: Wenn ich diesen Code auf einem Spielplatz ausführe, funktioniert es:

%Vor%     
sebastienhamel 16.10.2015 21:38
quelle