Сбой datePicker после нескольких выборов - PullRequest
1 голос
/ 01 октября 2011

У меня чертовски много времени. У меня есть DatePicker настройки даты начала и окончания, как календарь Apple. Я не получаю сообщений, когда нажимаю на кнопку выбора даты несколько раз. Я предполагаю, что у меня утечка памяти, но я не могу ее найти. пожалуйста, помогите ... потому что мне нужно получить доступ к ним несколькими способами, я превратил свои 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 в viewDidUnload и все три выпущены в dealloc.

1 Ответ

1 голос
/ 01 октября 2011

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

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

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

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