2009-10-09 7 views
1

아래 코드를 실행하려고하지만 "Tick"이 콘솔에 기록 된 후 시뮬레이터가 계속 잠겨 있습니다. 내 생각에 "Tock"을 출력하지 않으므로 "NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];"와 관련이 있습니다. IBactions는 버튼으로 활성화됩니다. timer 및 startTime은 .h에서 NSTimer 및 NSDate로 각각 정의됩니다.NSTimer Troubles

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?

코드 :

- (IBAction)startStopwatch:(id)sender 
{ 
    startTime = [NSDate date]; 
    NSLog(@"%@", startTime); 
    timer = [NSTimer scheduledTimerWithTimeInterval:1 //0.02 
              target:self 
              selector:@selector(tick:) 
              userInfo:nil 
              repeats:YES]; 
} 

- (IBAction)stopStopwatch:(id)sender 
{ 
    [timer invalidate]; 
    timer = nil; 
} 

- (void)tick:(NSTimer *)theTimer 
{ 
    NSLog(@"Tick!"); 
    NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow]; 
    NSLog(@"Tock!"); 
    NSLog(@"Delta: %d", elapsedTime); 
} 

나는이 (가) .H에 다음과 같은 한 : 당신이

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> { 

    NSTimer *timer; 
    NSDate *startTime; 
} 


- (IBAction)startStopwatch:(id)sender; 
- (IBAction)stopStopwatch:(id)sender; 
- (void)tick:(NSTimer *)theTimer; 

@property(nonatomic, retain) NSTimer *timer; 
@property(nonatomic, retain) NSDate *startTime; 

@end 

답변

4

:

startTime = [NSDate date]; 

당신이 필요합니다

startTime = [[NSDate date] retain]; 

alloc, new, init을 사용하여 생성 된 모든 것은 자동으로 해제됩니다 (경험적 규칙). 그래서 일어나고있는 일은 NSDate를 만들고, startTime에 할당하고, 자동으로 해제 (파괴) 한 다음, 완전 해제 된 객체에서 timeIntervalSinceNow를 호출하려고합니다.

보유 수를 추가하면 보유 수가 증가하므로 자동 지급 후 여전히 계속됩니다. 당신이 그것을 다 끝냈을 때 수동으로 릴리즈하는 것을 잊지 마십시오! self.startTime = [있는 NSDate 날짜]

+0

내 .H 코드로 게시물을 업데이트 : – SonnyBurnette

+0

'해야한다', 나는 @properties에 너무 익숙하지 않다. 그러나 내가 undertand 할 수 있었던 것에서, 그것은해야한다. 그러나 내 테스트에서는 그렇지 않습니다. 나는 그것이 "startTime = [NSDate date]; 일을하기 때문이라고 생각합니다." 합성되고있는 setter 속성을 거치지 않고 객체에 직접 액세스하고 있습니다 (또한 @synthesize, right?를 호출하고 있습니다). 내 방법은 작동합니다 .-D – ACBurk

+1

개체에 액세스하지 않고 개체를 인스턴스 변수에 직접 할당합니다. 그게 문제가있는 곳입니다. 너는 그 물건을 통과하지 않을거야. –

3

은 당신이해야 할 @property을 활용합니다. "비 원자력, 보유"가 보유 문제를 처리해서는 안됩니까? 그것은 당신의 방법과 다르게 행동합니까?
+0

DOH! 그건 완벽하게 이해가됩니다. 후속 조치를 보내 주셔서 감사합니다. – SonnyBurnette