我玩得很开心。我有一个 datePicker 设置开始和结束日期,就像苹果日历一样。每当我多次单击 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;
}
}
在 viewDidUnload
中将这三个设置为 nil
,并在 dealloc
中释放所有三个。
最佳答案
在进一步调查之前,您需要更改一些内容:
self.dateFormatter = [[NSDateFormatter alloc] init];
在此之后,dateFormatter 的保留计数为 2,其中 1 个用于分配,1 个用于属性“保留”。将其更改为仅 dateFormatter = [[NSDateFormatter alloc] init];
timeFormatter 和 datePicker 也相同。
- 将成员设置为 nil 后,您将无法再释放它。反过来做。
关于iphone - 多次选择后 datePicker 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7616081/