[英]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.