Ios 如何使NSTimer失效循环中运行的是哪一个?
我想以不同的时间表播放声音,比如每3次、每5次、9次之后、22次之后……等等,所以我创建了一个for循环,并通过不同的-2 scheduledTimerWithTimeInterval,如下所示Ios 如何使NSTimer失效循环中运行的是哪一个?,ios,objective-c,nstimer,Ios,Objective C,Nstimer,我想以不同的时间表播放声音,比如每3次、每5次、9次之后、22次之后……等等,所以我创建了一个for循环,并通过不同的-2 scheduledTimerWithTimeInterval,如下所示 -(void)bellsSchedual{ arrBellsListAllData=[EMeditationDBModel getDataFromBellsList:prop.userId]; EMeditationDBProperty *bellProp=[[
-(void)bellsSchedual{
arrBellsListAllData=[EMeditationDBModel getDataFromBellsList:prop.userId];
EMeditationDBProperty *bellProp=[[EMeditationDBProperty alloc]init];
for (int i=0; i<arrBellsListAllData.count; i++)
{
bellProp=[arrBellsListAllData objectAtIndex:i];
NSString *bellsTime=bellProp.bTime;
if ([bellProp.bTimeSchedule isEqualToString:@"after"]) {
bellTimer= [NSTimer scheduledTimerWithTimeInterval: [bellsTime intValue] target: self
selector: @selector(playSound:) userInfo:nil repeats: NO];
}
else if ([bellProp.bTimeSchedule isEqualToString:@"every"]){
bellTimer=[NSTimer scheduledTimerWithTimeInterval:[bellsTime intValue] target: self
selector: @selector(playSound:) userInfo:nil repeats: YES];
}
}
}
-(无效)Bellschedule{
arrBellsListAllData=[emeditiondbmodel getdatafromsbellslist:prop.userId];
emeditiondbproperty*bellProp=[[emeditiondbproperty alloc]init];
对于(int i=0;i-(void)Bellschedule{
arrBellsListAllData=[emeditiondbmodel getdatafromsbellslist:prop.userId];
emeditiondbproperty*bellProp=[[emeditiondbproperty alloc]init];
对于(inti=0;i我认为你应该使用nstimer数组的方法
在某个地方,主要是在你的视野里
NSMutableArray *arrTimers = [[NSMutableArray alloc] init]
在代码中
for (int i=0; i<arrBellsListAllData.count; i++)
{
bellProp=[arrBellsListAllData objectAtIndex:i];
NSString *bellsTime=bellProp.bTime;
if ([bellProp.bTimeSchedule isEqualToString:@"after"]) {
NSTimer *bellTimer= [NSTimer scheduledTimerWithTimeInterval:[bellsTime intValue] target: self
selector: @selector(playSound:) userInfo:nil repeats: NO]
[arrTimers addObject:bellTimer];
}
else if ([bellProp.bTimeSchedule isEqualToString:@"every"]){
NSTimer *bellTimer=[NSTimer scheduledTimerWithTimeInterval:[bellsTime intValue] target: self
selector: @selector(playSound:) userInfo:nil repeats: YES];
[arrTimers addObject:bellTimer];
}
}
如果要使特定计时器无效,请使用
[NSTimer scheduledTimerWithTimeInterval:[bellsTime intValue]
target:self
selector:@selector(playSound:)
userInfo:anyId
repeats:NO];
其中,传递userInfo对象中的任何标识符以查找任何特定计时器。您只有一个bellTimer
属性,因此当您将新计时器分配给此属性时,您将丢失上一个计时器。是的,我只有一个NSTimer对象,并且在同一对象中分配了不同的-2 scheduledTimerWithTimeInterval,这是错误的吗@PaulW11更正。一旦您指定了第二个计时器,第一个计时器将被释放,因为没有保留它的属性。还有一个认为我们每5秒启动一次计时器,但我想暂停设备在本例中,就像声音正在播放60、55、50 45,但我们在再次启动后将计时器暂停52秒,然后我的计时器再次启动48、43。。…所以我想玩旧的间歇,所以如果有任何想法如何解决这个问题,请给我想法@iPrabu
-(void) invalidateAllTimers{
for( NSTimer *timer in arrTimers) {
[timer invalidate];
}
}
[NSTimer scheduledTimerWithTimeInterval:[bellsTime intValue]
target:self
selector:@selector(playSound:)
userInfo:anyId
repeats:NO];