iOS - Wie um zu überprüfen, ob eine NSOperation ist in einem NSOperationQueue?
Aus der docs:
Einer operation Objekt in bei den meisten einen Vorgang in der Warteschlange zu einem Zeitpunkt, und diese Methode wirft eine NSInvalidArgumentException Ausnahme, wenn der Betrieb bereits in einer anderen Warteschlange. Ebenso wirft diese Methode eine NSInvalidArgumentException Ausnahme, wenn der Vorgang gerade ausgeführt wird oder schon fertig ausgeführt.
Also wie kann ich überprüfen, ob ich sicher fügen Sie eine NSOperation in eine queue?
Der einzige Weg, ich weiß, ist, fügen Sie die operation und versuchen Sie dann, um die Ausnahme zu fangen, wenn die operation bereits in einer Warteschlange oder ausgeführt vor.
InformationsquelleAutor Bryan Chen | 2011-03-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
NSOperationQueue
Objekte haben eine Eigenschaft namensoperations
.Wenn Sie einen Verweis auf Sie Warteschlangen es ist leicht zu überprüfen.
Können Sie überprüfen, ob die NSArray von Operationen enthält, die
NSOperation
wie diese:Oder Sie können die Iteration über alle Objekte:
Sagen Sie mir, wenn dies ist, was Sie suchen.
Alternativ
NSOperation
Objekte haben verschiedene Eigenschaften, mit denen Sie überprüfen Sie Ihren Zustand; wie:isExecuting
,isFinished
,isCancelled
usw...Eine andere Lösung, die ich denken kann, ist Unterklasse NSOperation, die eigentlich gefördert von Apple, und fügen Sie eine Boolesche Eigenschaft "isInQueue" , wird gekennzeichnet auf JA, wenn Sie es hinzufügen, um eine Warteschlange. Wie diese, die Sie gerade brauchen, um diese Eigenschaft zu prüfen, bevor Sie das hinzufügen von Operationen auf Warteschlangen.
Wann soll ich die Flagge der Betrieb? soll ich manuell einstellen, bevor ich es in die Warteschlange oder soll ich diese überschreiben-Methode, die aufgerufen wird, die von der queue und dann setzen Sie das Kennzeichen
Der einfachste Weg ist es, die Einstellung manuell, bevor Sie es hinzufügen, um die Schlange. Oo Sie könnte, erstellen Sie eine Methode in Ihrer Unterklasse aufgerufen addToQueue: das Märchen einer queue, flags bool-und fügt dann an die Warteschlange übergeben wird.
Auch konnte Sie nicht einfach verwenden
containsObject:
statt, Durchlaufen dieoperations
array?InformationsquelleAutor Zebs
Beim hinzufügen eines NSOperation Objekt zu einem NSOperationQueue, die NSOperationQueue behält sich das Objekt, also der Schöpfer des NSOperation freigeben können. Wenn Sie halten mit dieser Strategie NSOperationQueues wird immer sein, die nur Eigentümer Ihrer NSOperation Objekte, so dass Sie nicht in der Lage sein, eine NSOperation Objekt an jedes andere queue.
Wenn Sie immer noch wollen, um auf einzelne NSOperation Objekte, nachdem Sie Hinzugefügt wurden, um die Warteschlange, können Sie dies mit Hilfe der NSOperationQueue's
- (NSArray *)operations
Methode.InformationsquelleAutor James Bedford