datePicker在多次选择后崩溃

时间:2011-09-30 21:05:11

标签: iphone ios uidatepicker

我有一点时间。我有一个datePicker设置开始和结束日期,如苹果日历。每当我多次点击datePicker时,我都没有收到任何消息。我猜我在泄漏记忆却无法找到它。请帮助...因为我需要在多种方法中访问这些,我将我的UIDatePicker和NSDateFormatter变成了ivars。当按下按钮并且所有内容都设置为接受IB中的多个触摸时,BOOL设置。

如果只点击一次或有时两次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 个答案:

答案 0 :(得分:1)

在进一步调查之前,您需要更改一些内容:

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

在此之后,dateFormatter的保留计数为2,1为alloc,1为属性'retain'。将其更改为dateFormatter = [[NSDateFormatter alloc] init];对于timeFormatter也可以是相同的,也可能是datePicker。

  • 将成员设置为nil后,您无法再将其释放。反之亦然。