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, чтобы упростить свою жизнь и избежать странных сбоев памяти.