开发者

datePicker crashes after multiple selections

Im having a heck of a time. I have a datePicker setting start and end dates, like the apple calendar. I am crashing with no messages whenever I click the datePicker multiple times. I'm guessing Im leaking memory but cannot find it. please help... ecause I need to access these in multiple methods, I made my UIDatePicker and NSDateFormatter into ivars. the BOOL's are set when buttons are pressed and everything is set up to accept multiple touches in IB.

works fine if the datePicker is only clicked once or sometimes twice.

.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)
    {
        开发者_如何学PythonendTimeLabel.text = formattedDateStringTime;
        newEndTime = formattedDateStringTime;
    }
}   

all three set to nil in viewDidUnload and all three released in dealloc.


You need to change some things before further investigation:

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

After this the dateFormatter's retain count is 2, 1 for the alloc and 1 for the property 'retain'. Change it to just dateFormatter = [[NSDateFormatter alloc] init]; Same for the timeFormatter and probably the datePicker too.

  • After setting a member to nil, you cannot release it anymore. Do it the other way round.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜