我是Objective-C的初学者,不确定如何将变量从startTimer
方法传递给选择器。为什么我的选择器方法不知道来自circleSize
的变量starTimer
?谢谢您的帮助。
- (void)startTimer:(int)circleSize
{
self.clockTimer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(timerFired:)
userInfo:nil
repeats:YES];
}
- (void) timerFired:(NSTimer *)clockTimer
{
circleSize -= 1; // Error: Use of declared identifier
NSLog(@"What is circle now?%i", circleSize);
}
答案 0 :(得分:1)
选择器不知道circleSize
参数的原因是因为它在将来的某个时刻被异步调用。因此,它无法访问在其中调用startTimer
方法的范围。在每个方法中添加一个断点,然后查看堆栈跟踪和局部变量以自行确认。
您需要使用实例变量或属性来包含类来存储此信息:
@implementation MyClass {
int _circleSize;
}
- (void)startTimer:(int)circleSize
{
_circleSize = circleSize
self.clockTimer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(timerFired:)
userInfo:nil
repeats:YES];
}
- (void) timerFired:(NSTimer *)clockTimer
{
_circleSize -= 1; // Error: Use of declared identifier
NSLog(@"What is circle now?%i", _circleSize);
}
@end