0

私のアプリでNSOperationQueueを使用しています。私は操作に複数の引数を設定したいのですが、どうすればいいのですか?NSOperationの引数は何倍ですか?

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

答えて

6

必要なデータを含む配列または辞書を作成する必要があります。

例:

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]; 

と​​にあなたがその辞書に格納されたオブジェクトと値を使用することができます。

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

この回答は、正しいかもしれませんが、十分にはっきりしていないため、低品質とフラグが立てられています。 – vonPetrushev

関連する問題