2012-01-18 41 views
0

我有一類在sample.m其中我有以下方法來定義(樣品):的NSTimer選擇方法不獲取從另一個類訪問

-(NSInteger)refreshValue:(id)sender{ 
//Do some thing here and return value. 
    NSLog(@"Print something here"); 
    return something; 
} 

-(IBAction)monitorValue:(id)sender { 
    NSLog(@"In here"); 
    timer = [NSTimer scheduledTimerWithTimeInterval: 1 
       target: self 
        selector: @selector(refreshValue:) 
       userInfo: nil 
      repeats: YES]; 

} 

現在我有另一個類,test.m.從test.m,我這樣做:

Sample *test = [Sample alloc] 
[test monitorValue:(id)sender] 

當我運行此代碼,我可以看到監視器值方法被調用。但是refreshValue方法永遠不會從monitorValue中調用,這正是我想要的。如果我從sample.m中調用monitorValue,那麼一切正常。從另一個對象調用時它不起作用。

任何想法?謝謝。

+0

不知道它會幫助,但參數'scheduledTimerWithTimeInterval'從'1'到'1.0f'改變(這是一個NSTimeInterval - 或雙 - 值) 。另外,您是否每觸摸一次按鈕,都會啓動一個全新的計時器?你應該檢查一下'timer'是否爲空。 –

+0

修正它: [test performSelectorOnMainThread:@selector(monitorValue :) withObject:nil waitUntilDone:NO]; 無論如何。 – ZionKing

回答

2

您的計時器回調方法簽名不正確。每documentation,它應該是:如果

- (void)timerFireMethod:(NSTimer*)theTimer 
+0

這不是原因。定時器只是調用選擇器,他們不關心什麼方法的簽名。這個特殊的'refreshValue:'簽名完全可以被定時器調用而不會崩潰或任何東西。問題的真正原因必須在其他地方。 – hamstergene