Ios 如何使NSTimer失效循环中运行的是哪一个?

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=[[

我想以不同的时间表播放声音,比如每3次、每5次、9次之后、22次之后……等等,所以我创建了一个for循环,并通过不同的-2 scheduledTimerWithTimeInterval,如下所示

    -(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];