EXC_BAD_ACCESS при доступе к объекту NSDate в уведомлении - PullRequest
1 голос
/ 13 сентября 2011

У меня работает NSTimer с запланированным интервалом времени 1. Здесь я продолжаю отслеживать текущее время, как указано ниже.

- (void)myMethod:(NSTimer*)timer {

NSDate *startDate = [[[NSDate alloc] init] autorelease];
}

в некоторых уведомлениях я пытаюсь найти разницу между до и после времениизменить.

-(void) handleNotification: (NSNotification*) notification
{    
    NSTimeInterval elapsedTimeInterval = [startDate timeIntervalSinceNow];
}

Здесь я получаю EXC_BAD_ACCESS.

Если я использую startDate = [[NSDate date] retain]; без сбоев, не понял, куда выпустить startDate, так как я делаю недействительным этот таймерdealloc.

Примечание: нельзя использовать свойства, поскольку необходимо поддерживать 10.4.

С уважением,

Акбар

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Один из способов - сбросить предыдущее значение и назначить новое.

1 Назначьте значение следующим образом:

if (startDate) [startDate release];
startDate = [[NSDate date] retain];

2 Получите значение как обычно,

NSTimeInterval elapsedTimeInterval = [startDate timeIntervalSinceNow];

3 Наконец выпуск это метод dealloc .

0 голосов
/ 13 сентября 2011

Лучший способ - вообще не создавать объект NSDate:

@interface MyClass : NSObject {

     NSTimeInterval _startTime;
} 

@implementation...

- (void) myMethod:(NSTimer*)timer {

     _startTime = [NSDate timeIntervalSinceReferenceDate];
}

-(void) handleNotification: (NSNotification*) notification {    

    NSTimeInterval elapsedTime = ([NSDate timeIntervalSinceReferenceDate] - _startTime);
}
...