iphone @selector 有两个参数

发布于 2024-12-06 08:06:51 字数 273 浏览 0 评论 0原文

我有一个这样的方法:

-(void)A:(int)a B:(int)b{    
}

并且想将该方法放入一个新线程中:

NSInvocationOperation *theOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(A:B:) object:nil];

但是“EXC_BAD_ACCESS”。

I have a method like this:

-(void)A:(int)a B:(int)b{    
}

and want to put the method into a new thread:

NSInvocationOperation *theOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(A:B:) object:nil];

but "EXC_BAD_ACCESS".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

半城柳色半声笛 2024-12-13 08:06:51

使用 NSInitationOperation 调用的方法只能采用单个参数,并且该参数必须是 Objective-C 对象(如 NSNumber),而不是普通的 C 类型(如 <代码> int )。

通常,要处理多个参数,您可以使用 NSDictionary 或 NSArray 来保存参数:

- (void)myMethod:(NSDictionary*)parameters 
{
    int a = [[parameters objectForKey:@"A"] intValue];
    int b = [[parameters objectForKey:@"B"] intValue];

    // do something with a and b
}


[[NSInvocationOperation alloc] 
    initWithTarget:self
          selector:@selector(myMethod:)
            object:[NSDictionary dictionaryWithObjectsAndKeys:
                     [NSNumber numberWithInt:123], @"A",
                     [NSNumber numberWithInt:456], @"B",
                     nil]];

或者,您可以使用 NSInitation 对象来调用您的方法。这允许任意数量和任意类型的参数,但通常将参数放入 NSDictionary 中比构造 NSInitation 对象要容易得多。

有关如何使用 NSInitation 的信息。

The method you invoke with NSInvocationOperation can only take a single parameter, and that parameter must be an Objective-C object (like NSNumber) and not a plain C type (like int).

Typically, to handle multiple parameters you use an NSDictionary or NSArray to hold the parameters:

- (void)myMethod:(NSDictionary*)parameters 
{
    int a = [[parameters objectForKey:@"A"] intValue];
    int b = [[parameters objectForKey:@"B"] intValue];

    // do something with a and b
}


[[NSInvocationOperation alloc] 
    initWithTarget:self
          selector:@selector(myMethod:)
            object:[NSDictionary dictionaryWithObjectsAndKeys:
                     [NSNumber numberWithInt:123], @"A",
                     [NSNumber numberWithInt:456], @"B",
                     nil]];

Alternatively, you can use an NSInvocation object to invoke your method. This allows any number and any type of parameters, but it's typically much easier to just put your parameters in an NSDictionary than to construct an NSInvocation object.

Information on how to use NSInvocation.

恬淡成诗 2024-12-13 08:06:51

如果可能,尝试使用一个数组或字典作为选择器的参数。
然后,当您调用时,将两个参数转换为一个对象(数组或字典)并发送该对象。
在选择器中,我认为您可以从数组或字典中获取它们。

If possible, try to have one array or dictionary as the parameter to the selector.
Then when you are invoking convert your two params into one object (either array or dictionary) and send that object.
In the selector, i think you can get them back from array or dictionary.

書生途 2024-12-13 08:06:51

来自 Apple 的文档:“运行操作时调用的选择器。选择器可以采用 0 或 1 个参数;”。因此,如果您想调用具有更多参数的方法,请创建一个具有单个参数的额外方法,然后从那里调用具有更多参数的方法。

From Apple's docs: "The selector to invoke when running the operation. The selector may take 0 or 1 parameters;". So if you want to call a method with more parameters, create an extra method with a single parameter and call the method with more parameters from there.

迷爱 2024-12-13 08:06:51

您不需要第二个 B:

用法是:

[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(A:) object:nil];

You don't need the second B:

usuage would be:

[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(A:) object:nil];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文