DatePicker вылетает после нескольких выборок

#iphone #ios #uidatepicker

#iPhone #iOS #uidatepicker

Вопрос:

У меня чертовски много времени. У меня есть DatePicker, устанавливающий даты начала и окончания, например, Apple calendar. Я вылетаю без сообщений всякий раз, когда я нажимаю на DatePicker несколько раз. Я предполагаю, что у меня утечка памяти, но я не могу ее найти. пожалуйста, помогите … поскольку мне нужно получить к ним доступ несколькими способами, я превратил свои UIDatePicker и NSDateFormatter в ivars. BOOL устанавливаются при нажатии кнопок, и все настроено на прием нескольких касаний в IB.

работает нормально, если на DatePicker нажимается только один или иногда два раза.

.h

 IBOutlet UIDatePicker *datePicker;    
NSDateFormatter *dateFormatter;    
NSDateFormatter *timeFormatter;   

@property (nonatomic, retain) UIDatePicker *datePicker;    
@property (nonatomic, retain) NSDateFormatter *dateFormatter;
@property (nonatomic, retain) NSDateFormatter *timeFormatter;
  

.m

 @synthesize datePicker;
@synthesize dateFormatter, timeFormatter;
  

viewDidLoad:

 NSDate *now = [[NSDate alloc] init];

[datePicker setDate:now animated:NO];
//known bug - hopefully fixed in 4.3
//[datePicker setMinimumDate:now];
[now release];

self.dateFormatter = [[NSDateFormatter alloc] init];
[self.dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[self.dateFormatter setTimeStyle:NSDateFormatterNoStyle];

formattedDateStringDate = [self.dateFormatter stringFromDate:datePicker.date];
NSLog(@"initdate %@", formattedDateStringDate);

self.timeFormatter = [[NSDateFormatter alloc] init];
[self.timeFormatter setDateStyle:NSDateFormatterNoStyle];
[self.timeFormatter setTimeStyle:NSDateFormatterShortStyle];

formattedDateStringTime = [self.timeFormatter stringFromDate:datePicker.date];
NSLog(@"initTime %@", formattedDateStringTime);
  

valueDidChange:

 - (IBAction)changeDateInLabel:(id)sender
{
    formattedDateStringDate = [dateFormatter stringFromDate:datePicker.date];
    //NSLog(@"date %@", formattedDateStringDate);

    formattedDateStringTime = [timeFormatter stringFromDate:datePicker.date];
    //NSLog(@"time %@", formattedDateStringTime);

    if (isStartDateSet)
    {
        startDateLabel.text = formattedDateStringDate;
        startTimeLabel.text = formattedDateStringTime;
        newDate = formattedDateStringDate;
        newStartTime = formattedDateStringTime;
    }

    if (isEndDateSet)
    {
        endTimeLabel.text = formattedDateStringTime;
        newEndTime = formattedDateStringTime;
    }
}   
  

для всех трех установлено значение nil in viewDidUnload , и все три выпущены dealloc .

Ответ №1:

Вам необходимо изменить некоторые вещи перед дальнейшим расследованием:

  • self.dateFormatter = [[NSDateFormatter alloc] init];

После этого счетчик сохранения DateFormatter равен 2, 1 для alloc и 1 для свойства «сохранить». Измените его на то dateFormatter = [[NSDateFormatter alloc] init]; же самое для timeFormatter и, возможно, для DatePicker.

  • После установки для элемента значения nil вы больше не сможете его освободить. Сделайте это наоборот.