2011-11-30 87 views
1

我有了在NSNumberNSTimeruserInfo是否可以更改NSTimer的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]; 

和數據變化將反映在選擇

3

你最好創建一個新的計時器。如果類沒有提供更改該屬性的接口,那麼您應該將其視爲私有和只讀。

它甚至不能在這種情況下做的周圍通常運行結束,使用KVC:

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

因爲NSTimer不是KVC兼容該鍵。

2

一個NSTimer的用戶信息屬性並非旨在是一個通用的數據存儲設備。它在那裏,以便你可以有一些上下文伴隨你的計時器,以便如果多個計時器調用相同的動作,計時器的目標可以區分一個計時器。

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>; 
相關問題