2013-12-13 3 views
0
@interface Taxi_MainViewController : Taxi_BaseNavViewController 
{ 
    __block NSTimer *timer_; 
} 



    [Taxi_do_order psg_place_orderWithMemberId:strMemberId_ orderStatus:K_orderStatus_open andCLLocationCoord:location.coordinate callback:^(NSInteger iOrderId){ 
     [Taxi_StatusView dismiss]; 
     if (iOrderId >=0) 
     { 
      isOrderExist = YES; 
      [weakSelf_ showWaittingDriverAcceptView]; 
      timer_ = [NSTimer scheduledTimerWithTimeInterval:2.0 
                   target:weakSelf_ 
                  selector:@selector(actListen:) 
                  userInfo:nil 
                   repeats:YES]; 
     }else 
      [weakSelf_ hideWaittingDriverAcceptView]; 
    }faile:^(){ 
     [Taxi_StatusView showLostNetWork]; 
    }]; 

когда я вызываю [timer_ invalidate], timer_ = nil; при другом способе функция таймера все равно звонит каждые 2 секунды.Как запустить таймер при создании таймера внутри функции блока?

ответ

1

В вашем случае переменная timer_ никогда не сохраняется, и вы теряете указатель в области конечного блока. С собственностью у вас есть механизм сохранения/освобождения.

Попробуйте это:

@interface Taxi_MainViewController : Taxi_BaseNavViewController 
{ 

} 

@property (nonatomic,retain) NSTimer* timer; 

@end 



[Taxi_do_order psg_place_orderWithMemberId:strMemberId_ orderStatus:K_orderStatus_open andCLLocationCoord:location.coordinate callback:^(NSInteger iOrderId){ 
     [Taxi_StatusView dismiss]; 
     if (iOrderId >=0) 
     { 
      isOrderExist = YES; 
      [weakSelf_ showWaittingDriverAcceptView]; 
      self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 
                   target:weakSelf_ 
                  selector:@selector(actListen:) 
                  userInfo:nil 
                   repeats:YES]; 
     }else 
      [weakSelf_ hideWaittingDriverAcceptView]; 
    }faile:^(){ 
     [Taxi_StatusView showLostNetWork]; 
    }]; 
Смежные вопросы