0

-[NSInvocationOperation initWithTarget:selector:object:]呼び出されるメソッドの引数として渡されるオブジェクトを 1 つだけ受け入れます。2 つの引数を使用したい。どうやってやるの?

これは私のコードです:

- (void)loadImage:(NSURL *)imageURL
{
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]
                                        initWithTarget:self
                                        selector:@selector(requestRemoteImage:)
                                        object:imageURL];
    [queue addOperation:operation];
}

- (void)requestRemoteImage:(NSURL *)imageURL
{
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL];
    UIImage *image = [[UIImage alloc] initWithData:imageData];

    [self performSelectorOnMainThread:@selector(placeImageInUI:) withObject:image waitUntilDone:YES];
}
4

3 に答える 3

1

操作を初期化するには、NSInvocation オブジェクトを使用できます。

- (id)initWithInvocation:(NSInvocation *)inv

(NSInvocation は複数の引数を処理できます); または、必要な引数を NSArray または NSDictionary にラップすることもできます (それらがオブジェクトである場合)。

于 2012-08-28T17:26:41.750 に答える
1

操作を要求しinvocation、操作をキューに追加する前にそれを変更します。

 NSInvocation * invocation = [operation invocation];
 [invocation setArgument:&anotherObject atIndex:3];    
 // Indexes 0 and 1 are self and cmd, and you've already used index 2

または、Rob Napier が提案したようにNSBlockOperation、はるかに柔軟で使いやすい を使用してください。

于 2012-08-28T17:39:01.593 に答える
-1

必要なすべての値を含む辞書を送信できます

于 2012-08-28T17:25:42.887 に答える