iphone - 多次选择后 datePicker 崩溃

标签 iphone ios uidatepicker

我玩得很开心。我有一个 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/

相关文章:

objective-c - 如何在 block 中使用自定义类型的参数

ios - 自定义 View 的自定义委托(delegate)

javascript - Mootools DatePicker 独立版

iphone - 当用户点击 iPhone 键盘上的“发送”按钮时,如何执行选择器?

ios - Cocoapod pod.lock 文件在 pod 安装时通过在 repo url 末尾添加 .git 进行更改

ios - 有什么方法可以管理 iPhone 应用程序中的 session 吗?

iphone - 带有页面的 UIScrollView 内的 UIDatePicker

ios - 分配区域的 Uidatepicker 日期格式问题

iphone - iphone 中的套接字编程示例

iphone - 设置视网膜背景图像放大显示