NSDate выбрасывает BAD_EXCESS для чего?

У меня ниже.

@interface MyViewController () {
    NSDate *myCurrentDate;
}

@implementation MyViewController

-(void)viewDidLoad {
    [super viewDidLoad];
    myCurrentDate = [NSDate date];
}  


- (IBAction) prevAction:(id)sender {
    NSLog(@"myCurrentDate===%@", myCurrentDate); // here it says 
    myCurrentDate = [myCurrentDate dateByAddingTimeInterval:60*60*24*-1];
    [self formatDateAndPostOnButton];
}

Когда я пытаюсь напечатать текущую дату, как показано ниже, она выдает сообщение BAD_EXCESS

NSLog(@"myCurrentDate===%@", myCurrentDate);

Ниже скриншот для того же.

Я не использую ARC в моем проекте.

Есть идеи, что не так?

1 ответ

Решение

Поскольку вы не используете ARC, самый простой способ сохранить объекты - это использовать сгенерированные сеттеры / геттеры.

Вместо:

@interface MyViewController () {
    NSDate *myCurrentDate;
}

делать

@interface MyViewController ()
@property(nonatomic, retain) NSDate* myCurrentDate;
@end

Так оно и будет держать NSDate сохраняется. Прямо сейчас ваш NSDate освобождается, когда пул авто-релиза сливается.

Вам нужно будет использовать предоставляемые методы получения / установки, однако:

self.myCurrentDate = [self.myCurrentDate dateByAddingTimeInterval:60*60*24*-1];

В любом случае, я бы порекомендовал начать использовать ARC, чтобы упростить свою жизнь и избежать странных сбоев памяти.

Другие вопросы по тегам