Ios NSTimer未调用方法
我有一个NSTimer,它应该每秒调用一个方法,但它似乎根本没有调用它 以下是我声明计时器的方式:Ios NSTimer未调用方法,ios,objective-c,swift,nstimer,Ios,Objective C,Swift,Nstimer,我有一个NSTimer,它应该每秒调用一个方法,但它似乎根本没有调用它 以下是我声明计时器的方式: [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(fadeManager:) userInfo:nil repeats:YES]; 这是它调用的方法: -(void) fadeManager: (NSTimer*) timer{ NSLog(@"IT'S WORKING!"); self.playH
[NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(fadeManager:) userInfo:nil repeats:YES];
这是它调用的方法:
-(void) fadeManager: (NSTimer*) timer{
NSLog(@"IT'S WORKING!");
self.playHead += .1; // keeps track of where they are in full track
if (self.playHead >= self.wait && ![player isPlaying]) { // checks if wait is over
[player play];
}
if (self.playHead >= self.duration + self.startTime && [player isPlaying]) { // checks if full duration is over
[player pause];
[self reset];
}
int fadeOutArea = self.startTime + self.duration - self.fadeOut;
int fadeInArea = self.startTime + self.fadeIn;
if (self.playHead <= fadeInArea && [player volume] < relativeVolume) { // checks if fadingIn.
[self fadeInIncriment];
}
if (self.playHead >= fadeOutArea && [player volume] > 0) {
[self fadeOutIncriment];
}
}
-(无效)fadeManager:(NSTimer*)计时器{
NSLog(@“它正在工作!”);
self.playHead+=.1;//跟踪它们的完整位置
如果(self.playHead>=self.wait&![player isPlaying]){//检查等待是否结束
[玩家游戏];
}
如果(self.playHead>=self.duration+self.startTime&&[player isPlaying]){//检查完整持续时间是否结束
[玩家暂停];
[自复位];
}
int fadeOutArea=self.startTime+self.duration-self.fadeOut;
int fadeInArea=self.startTime+self.fadeIn;
如果(self.playHead=fadeOutArea&&[player volume]>0){
[自我消失犯罪];
}
}
代码不起作用,所以我把NSLog和断点都放进去了。似乎从来没有人叫过它。为什么会这样?我在.m文件中这样声明方法是否重要:
#import <AVFoundation/AVFoundation.h>
@interface CueMusic ()
- (void) delayFadeOut: (AVAudioPlayer*) dFade;
- (void) fadeInIncriment;
- (void) fadeOutIncriment;
- (void) fadeManager: (NSTimer*) timer; // <--------
- (void) start;
@end
@implementation CueMusic
.......
#导入
@接口提示音乐()
-(无效)延迟衰减:(AVAudioPlayer*)dFade;
-(无效)发案;
-(无效)渐弱犯罪;
-(void)fadeManager:(NSTimer*)计时器;// 任用
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(fadeManager:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
或
从文件中
- 使用或类方法创建计时器,并在默认模式下在当前运行循环中安排它
- 使用或类方法创建计时器对象,而无需在运行循环中对其进行调度。(创建计时器后,必须通过调用相应nsrunlop对象的addTimer:forMode:method手动将计时器添加到运行循环中。)
银行代码
或者
let timer: NSTimer = NSTimer(timeInterval: 1.0, target: self, selector: "fadeManager:", userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode)
或
你需要启动计时器
您可以通过将其添加到线程来执行此操作:
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(fadeManager:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
或者叫
[timer fire];
您可以使用:
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
您的问题是,当使用timerWithTimeInterval:target:selector:userInfo:repeats:
时,生成的计时器不会自动添加到运行循环中。我建议改用scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
,它为您执行此步骤
如果您喜欢使用timerWithTimeInterval:target:selector:userInfo:repeats:
,则需要手动将计时器添加到当前运行循环中。为此,请调用nsrunlop
的addTimer:forMode:
方法
这甚至与Xcode.Ohhh没有任何关系。。。我一定是在xcode建议中选择了错误的方法。我本想给第二个打电话的。我也这么做了,我已经多次看到同样的问题。
[timer fire];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] addTimer:tTimer forMode: NSDefaultRunLoopMode];