[英]Cant pause and resume nstimer in another class
在类1中定义了myTimer
@property (nonatomic, retain) NSTimer *myTimer;
@synthesize myTimer;
- (void)viewDidLoad {
myTimer = [NSTimer scheduledTimerWithTimeInterval:2.6
target:self
selector:@selector(updateView:)
userInfo:nil
repeats:YES];
[super viewDidLoad];
}
- (void)updateView:(NSTimer *)theTimer
{
if (index < [textArray count])
{
self.textView.text = [self.textArray objectAtIndex:index];
self.imageView.image = [self.imagesArray objectAtIndex:index];
index++;
}else{
index = 0;
}
我想在mainviewcontroller类中暂停并恢复myTimer。
在mainviewcontroller.h中
@property (nonatomic, strong) ClassOne *oneclass;
并在mainviewcontroller.m中
@synthesize oneclass;
然后通过mainviewcontroller中的UIButton暂停并恢复myTimer
-(void)playpauseAction:(id)sender {
if([audioPlayer isPlaying])
{
[sender setImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal];
[audioPlayer pause];
[myTimer invalidate];
}else{
[sender setImage:[UIImage imageNamed:@"audiostop.png"] forState:UIControlStateNormal];
[audioPlayer play];
[myTimer fire];
if(isFirstTime == YES)
{
self.timer = [NSTimer scheduledTimerWithTimeInterval:06.0
target:self
selector:@selector(displayviewsAction:)
userInfo:nil
repeats:NO];
isFirstTime = NO; } } }
但是出现语义问题和ARC语义问题错误
未知接收者myTimer您的意思是NSTimer。 没有已知的选择器失效和触发类方法
感谢帮助。
是否将myTimer设置为ClassOne
的属性?
@property (nonatomic, strong) NSTimer *myTimer;
和
@synthesize myTimer;
然后,您可以调用[oneClass.myTimer invalidate];
和[oneClass.myTimer fire];
在您的mainviewcontroller中。
看来您正在viewDidLoad方法调用中创建计时器对象。 在尝试操作timer属性之前,请确保已实际加载视图,否则结果将不令人满意。 同样,就像@Anoop Vaidya所说的那样,您需要确保在尝试访问类的属性之前初始化类One对象。 做到这一点的一种好方法是通过以下方式修改mainViewController代码:
-(void)playpauseAction:(id)sender {
//This code assumes there is an ivar in mainViewController called aClassOneObject
if([audioPlayer isPlaying]) {
[sender setImage:[UIImage imageNamed:@"music.png"] forState:UIControlStateNormal];
[audioPlayer pause];
if (aClassOneObject)
[[aClassOneObject myTimer] invalidate];
else
//Log error that the aClassOneObject was nil
} else {
[sender setImage:[UIImage imageNamed:@"audiostop.png"]
forState:UIControlStateNormal];
[audioPlayer play];
if (aClassOneObject)
[[aClassOneObject myTimer] fire];
else
//Log error that the aClassOneObject was nil
if(isFirstTime == YES) {
self.timer = [NSTimer scheduledTimerWithTimeInterval:06.0
target:self
selector:@selector(displayviewsAction:)
userInfo:nil
repeats:NO];
isFirstTime = NO;
}
}
}
当您从其他类调用计时器时,需要通过创建第一类的对象进行调用。
或者,您可以从第二类向第一类发送通知,该通知将被观察,然后将调用您所需的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.