2011-08-10 4 views
4

누군가가이 문제를 해결할 수 있기를 바랍니다. -timeIntervalSinceNow 메소드를 사용할 때 잘못된 액세스 오류가 계속 발생합니다. 나는 NSDate *startDate 불리는이 클래스의 변수를하고 난-timeIntervalSinceNow에 대한 EXC_BAD_ACCESS 오류

startDate@property (nonatomic, retain) NSDate *startDate; 여기에 코드에서 사용되는 추가했습니다 : 프로그램이 [startDate timeIntervalSinceNow]에 도달하면 그것은을 제공

startDate = [NSDate date]; 
    updateTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 
                target:self 
               selector:@selector(updatePlaybackPosition:) 
               userInfo:nil 
                repeats:YES]; 
} 

}

- (void)updatePlaybackPosition:(NSTimer *)timer { 
    NSTimeInterval interval = [startDate timeIntervalSinceNow]; 

잘못된 액세스 오류. 이 주제에 대해 읽은 다른 게시물에서 대답은 일반적으로 날짜를 유지하는 것과 관련이있는 것으로 보입니다. 그래서 내가 무엇을 놓치고 있는지 잘 모르겠습니다. 어떤 도움을 많이 주시면 감사하겠습니다!

답변

0

[NSDate date]은 자동 회신 된 NSDate을 반환합니다. 그 값이 반환 된 메소드 밖에서 값을 사용하려면 retain이어야합니다 (완료되면 release).

+0

감사합니다. [[NSDate date] retain]로 변경했으며 처음 몇 번 [startDate timeIntervalSinceNow]가 타이머에서 반복되는 동안 프로그램이 잘못된 액세스 오류를 제공하는 것을 중지하지만, 몇 개의 루프가 끝납니다. 또한 반환하는 시간 간격은 null입니다. 더 이상의 제안? – cms

5

NSDate은 타이머가 시작되기 전에 자동으로 해제되었습니다. updated :self.을 사용하여 인스턴스 변수 대신 선언 한 속성을 사용해야합니다. 그것은 당신을 위해 유지를 제대로 처리 할 것입니다.

self.startDate = [NSDate date]; 

다음

- (void)updatePlaybackPosition:(NSTimer *)timer { 
    NSTimeInterval interval = [self.startDate timeIntervalSinceNow]; 
+0

음 .. 업데이트 방법을 통해 여전히 두 번째 루프에 액세스 할 수 없습니다. – cms

+0

게시물의 속성 선언을 놓쳤습니다. 속성이 아니라 인스턴스 변수에 액세스하고 있습니다. 나는 나의 대답을 업데이트 할 것이다. – Joe

+0

오, 고마워. 나는 여전히 변경 사항을 만들었지 만 업데이트 타이머를 한 번 반복 한 다음 해당 라인에 대한 잘못된 액세스를 수행합니다. – cms

1

사실은 결국,이에 대한 답을 알아 냈어. -timeIntervalSinceNow를 사용하지 말고 사용하는 것이 더 좋습니다.

-timeIntervalSinceDate:[NSDate date] 

그것은 본질적으로 똑같은 일을하지만 몇 가지 이유 때문에 --timeIntervalSinceNow는 매회 잘못된 액세스 오류를 발생 시키지만 위의 방법은 정상적으로 작동합니다.