2011-11-30 6 views
1

난에 NSNumber이있는 NSTimer이 그 userInfoNSTimer의 userInfo를 변경할 수 있습니까?

fireTimer = [NSTimer scheduledTimerWithTimeInterval:6.0 
              target:self 
              selector:@selector(fireTileAddingToColumn:) 
              userInfo:myNumber 
              repeats:YES]; 

NSTimer가 만들어지고 몇 번을 실행 한 후, 나는 myNumber의 값을 변경할 수 있도록하고 싶습니다하고 반영했다 fireTileAddingToColumn: 나는이 일을 얻는 데 어떤 행운이 없었습니다. 누구든지 어떤 제안이 있습니까?

답변

3

당신은 항상 타이머에 사용자 정보를 보유하는 개체를 전달할 수 있습니다

@interface Holder 
@property id data; 
-(id) initWithData: (id) data; 
@end 

// implement it 

Holder *holder = [[Holder alloc] initWithData:myNumber]; 
fireTimer = [NSTimer scheduledTimerWithTimeInterval:6.0 target:self 
      selector:@selector(fireTileAddingToColumn:) holder 
       repeats:YES]; 

[Holder setData: myNumber2]; 

및 데이터 변경이 선택에 반영됩니다

NSTimer의 사용자 정보 속성이 없습니다
3

새 타이머를 만드는 것이 가장 좋습니다. 클래스가 해당 속성을 변경하기위한 인터페이스를 제공하지 않으면 private 및 read-only로 간주해야합니다.

그것은 KVC를 사용하여, 그 주위에 보통의 최종 실행을 할이 경우에도 불가능 : NSTimer 이후

[timer setValue:newNumber forKey:@"userInfo"]; 

가 해당 키에 대한 KVC-호환되지 않습니다.

2

할 수 범용 데이터 저장 장치. 여러 타이머가 동일한 작업을 호출하는 경우 타이머의 대상이 다른 타이머와 구별 할 수 있도록 타이머와 함께 일부 컨텍스트를 가질 수 있도록해야합니다.

1

게으른 사람들의 가변 userInfo :

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:6.0 
             target:self 
             selector:@selector(fireTileAddingToColumn:) 
             userInfo:@{@"mutable": [@{@"key": <value>} mutableCopy] 
             repeats:YES]; 

그리고 액세스 할 수 :

timer.userInfo[@"mutable"][@"key"] = <newValue>; 
관련 문제