2012-12-02 43 views
2

我剛學習使用Objective-C,並嘗試使用NSTimer與scheduledTime間隔沒有運氣。我使用的外觀的代碼如下:獲取NSTimer調用方法的問題

#import <Foundation/Foundation.h> 
#import "timerNumber1.h" 

int main(int argc, const char * argv[]) 
{ 
@autoreleasepool { 

    NSTimer *timerNumber1; 

    NSInteger counter=0; 

    while (counter<5){ 


     timerNumber1 = [NSTimer scheduledTimerWithTimeInterval:1 target:timerNumber1 selector: @selector(updateTimer:) userInfo:nil repeats:YES]; 

    NSLog(@"Hello, World!"); 
     counter++; 
    } 
} 
return 0; 
} 

timerNumber1頭看起來如下

#import <Foundation/Foundation.h> 

@interface timerNumber1 : NSObject 
-(void) updateTimer; 

@end 

和實施

#import "timerNumber1.h" 

@implementation timerNumber1 

-(void) updateTimer{ 
NSLog(@"Timer Updated!"); 

} 
@end 

的方法似乎從來沒有火,我從來沒有看到計時器更新。
我在這裏做錯了什麼?

回答

0

變量timerNumber1尚未初始化(可能是nil),所以target參數不會有效。將在nil對象上調用updateTimer方法,該對象在Objective-C中靜默失敗。

您需要先創建對象,然後才能按照您的操作進行操作。

旁註:有一個與您的變量名稱完全相同的類有點不尋常。這通常不是一個好主意,至少出於可讀性的原因。另外,由於您有repeats:YES,因此我不能100%確定您需要爲每次重複創建一個計時器。但是我會讓你成爲你想要對你的代碼做什麼的評判者。 :-)

編輯:剛剛注意到別的東西,選擇器可能有點偏離 - 選擇器中有:,但updateTimer不帶任何參數。在那種情況下,我認爲那裏不應該有冒號。

因此,嘗試這樣的事情:

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 

     NSTimer *timer; 
     timerNumber1 *timerNumber1Object = [[timerNumber1 alloc] init]; 

     NSInteger counter=0; 

     while (counter<5){ 
      timer = [NSTimer scheduledTimerWithTimeInterval:1 target:timerNumber1Object selector: @selector(updateTimer) userInfo:nil repeats:YES]; 

      NSLog(@"Hello, World!"); 
      counter++; 
     } 
    } 
    return 0; 
} 
+2

將是非常好的,如果人們會後與他們的反對票的理由的評論讓誰張貼答案的人可以完善自己。有點叫做*建設性的批評*。 : - | –

+0

while循環的原因是允許定時器運行。不過,我認爲我需要成爲一名運動員。我試着刪除while循環,並在頭文件中使用NSTimer而不是NSObject。但是我仍然得到相同的結果。 – user1870561

+0

代碼現在看起來像這樣: – user1870561