ios - 将参数传递给作为参数的选择器

标签 ios objective-c selector

我有以下方法

-(void)changeLevelWithTimeInterval:(NSTimeInterval)timeInterval withLevel:(NSUInteger)level{

    [NSTimer scheduledTimerWithTimeInterval:timeInterval
                                 target:self
                               selector:@selector(changeLevel:)
                               userInfo:nil
                                repeats:NO];
}

我想用上面方法的级别参数调用 changeLevel:(NSUInteger)level 方法。

我试过了

[self performSelector:@selector(changeLevel:) withObject:level]

并试图将其作为参数传递,但它不起作用。

最佳答案

performSelector:withObject:将指针对象(也称为 id)作为参数,因此无法传入 NSUInteger。作为参数,作为 NSUInteger只是一个 typedeffed unsigned int .一种特殊的解决方法是将关卡封装在 NSNumber 中。对象,并得到 intValueNSNumberchangeLevel:方法。

它可能是:

NSNumber *levelNumber = [NSNumber numberWithInt:(int)level];
[self performSelector:@selector(changeLevel:) withObject:levelNumber];

并更改changeLevel:的签名和实现如下:

-(void)changeLevel:(NSNumber*)levelNumber{
    int level = [levelNumber intValue];
    //do anything you want with the level..
}

要在间隔后触发该方法,您可以尝试:

[self performSelector:@selector(changeLevel:) withObject:levelNumber afterDelay:timeInterval];

而不是直接安排定时器。

关于ios - 将参数传递给作为参数的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921436/

相关文章:

ios - NSPredicate 返回所有对象

swift - 你如何通过 Swift 4 中的发件人检索用户数据?

android - React Native - 当我在 API 调用加载时锁定屏幕时,应用程序进程停止

ios - 即使使用 htaccess/htpasswd 也检测苹果触摸图标

ios - MKOverlayView 和触摸

ios - TableView 不返回数据

ios - 如何删除 socket 的所有引用

objective-c - 将xcode项目编译成库文件

ios - Swift 中选择器有返回值吗?

jquery - 获取一个 HTML 元素