NSTimer で実行するメソッドに引数を渡す

NSTimer で実行するメソッドに引数を渡す機会は少ないと思うが、メモ。

NSDictionary で渡すのが通常の手順

NSDictionary *dictionary =[NSDictionary dictionaryWithObjectsAndKeys:
                           @"tokyo",      @"where",
                           @"12:30",      @"time",    nil ];

NSTimer *timer = [ NSTimer scheduledTimerWithTimeInterval:10
                                                target:self
                                              selector:@selector(doMethod:)
                                              userInfo:dictionary
                                               repeats:NO ];

------ 停止する時は、nil をセットした方が良いらしい ------
if (timer != nil){
   if ([timer isValid]){
      [timer invalidate];
      timer = nil;
}


selector で指定したメソッド、userInfo で受け取る

-(void)doMethod:(NSTimer*)timer
{
   NSString *where = [ [timer userInfo] objectForKey:@"where" ];
   NSString *timestr  = [ [timer userInfo] objectForKey:@"time" ];
}