【问题标题】:Multiples arguments to NSOperation?NSOperation 的多个参数?
【发布时间】:2012-03-30 00:27:55
【问题描述】:

我在我的应用程序中使用 NSOperationQueue,我想为我的操作设置多个参数,我该怎么做?

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

【问题讨论】:

    标签: iphone cocoa-touch nsoperation nsoperationqueue nsinvocationoperation


    【解决方案1】:

    你必须用你需要的数据创建一个数组或字典。

    例如:

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

    在- (void)methodCall:(NSDictionary *)argumentDictionary 中,您可以使用存储在该字典中的对象和值。

    【讨论】:

      【解决方案2】:
      //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];
      

      【讨论】:

      • 这个答案,即使它可能是正确的,也被标记为低质量,因为它不够清晰。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多