2012-07-03 82 views
0

我有以下代碼寫入運行NSTimer。但是NSTimer選擇器沒有被調用。NSTimer選擇器沒有被調用

.h文件中

@interface XViewController : UIViewController { 
    NSTimer *repeatServerRequest; 
} 

@property(nonatomic, retain) NSTimer *repeatServerRequest; 

- (void)checkForMinimunOnetimePinEntry; 
- (void) initializeTimer; 
- (void)stopTimer; 

.m文件

@synthesize repeatServerRequest; 

- (void)checkForMinimunOnetimePinEntry { 
    // some code 
} 

- (void) initializeTimer { 
    repeatServerRequest = [NSTimer scheduledTimerWithTimeInterval:15.0 
            target:self 
            selector:@selector(checkForMinimunOnetimePinEntry) 
            userInfo:nil 
            repeats:YES]; 
} 

- (void)stopTimer { 
    [repeatServerRequest invalidate]; 
    [repeatServerRequest release]; 
    repeatServerRequest = nil; 

// [self.repeatServerRequest invalidate]; 
// [self.repeatServerRequest release]; 
// self.repeatServerRequest = nil; 
} 

我在做什麼錯?

還回答我哪一個是正確的使用:self.repeatServerRequest或只是repeatServerRequest? 在此先感謝!

+0

你確定你調用了initializeTimer嗎?在那裏確認一個斷點。至於第二部分,如果你使用屬性訪問器(屬性本身將爲你處理內存管理),所有你需要的是invalidate並設置爲nil。如果你這樣做,這是正確的,但最好堅持屬性方法(當然,在init和dealloc之外) – borrrden

+0

是的,我只用這個stmt'[self initializeTimer];' –

+0

你確定由於定時器設置爲15秒,您是否等待了15秒? –

回答

1

問題是您將計時器分配給類字段,而不是屬性。

爲了使代碼正常工作,只需在repeatServerRequest =之前放self.即可。

當您使用self.repeatServerRequest時,編譯器調用[self setRepeatServerRequest:...]並保留自動釋放定時器。

+0

我也試過這個,但沒有成功:-(我不需要使用''fire''消息觸發'NSTimer' ?? –

+0

應用程序現在崩潰了stmt'[self.repeatServerRequest invalidate];'''[self.repeatServerRequest release];' –

+1

不,您不需要使用fire因爲你調用了* scheduled * timer。這意味着它會自動啓動它自己,並且由於它是重複的,它會保證在你取消它之前保持有效,因爲它會被它所在的運行循環保留(所以autorelease是而不是問題) – borrrden

0

你有類的init方法嗎?也許你沒有把它放在你的代碼中,但我更願意問...

+0

嘿,你能不能只是尋找我的問題的評論?它可能會幫助你,因爲我沒有初始化它 –