0

Ich verwende NSOperationQueue in meiner App und ich möchte mehrere Argumente für meine Operation festlegen, wie kann ich das tun?Mehrere Argumente für NSOperation?

NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; 
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(methodCall) object:nil]; 
    [queue addOperation:operation]; 
    [operation release]; 

Antwort

6

Sie müssen ein Array oder ein Wörterbuch mit den Daten erstellen, die Sie benötigen.

Ex:

NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; 
NSDictionary *argumentDictionary = [NSDictionary dictionaryWithObjectsAndKeys:object1, @"Object1Key", object2, @"Object2Key", nil]; 
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(methodCall:) object:argumentDictionary]; 
[queue addOperation:operation]; 
[operation release]; 

und in - (void)methodCall:(NSDictionary *)argumentDictionary können Sie die Objekte und Werte in diesem Wörterbuch gespeichert sind.

1
//Correct approach is to use NSInvocation 
//create nsinvocation obj 
SEL selector= @selector(methodName:); 
NSMethodSignature * sig= [[self class] instanceMethodSignatureForSelector: selector]; 
NSInvocation * invocation=[NSInvocation invocationWithMethodSignature:sig]; 
[invocation setTarget: self]; 
[invocation setSelector:selector]; 
[invocation setArgument:&firstArgument atIndex: 2]; 
[invocation setArgument:&secArgument atIndex: 3]; 
//operation with invocation 
NSInvocationOperation* operation = [[NSInvocationOperation alloc] initWithInvocation:invocation]; 
[opQueue addOperation:operation]; 
+0

Diese Antwort ist, obwohl sie korrekt sein könnte, als minderwertig gekennzeichnet, weil sie nicht eindeutig genug ist. – vonPetrushev