比较 NSDate 值和 EXC_BAD_ACCESS 错误时的奇怪问题

Posted

技术标签:

【中文标题】比较 NSDate 值和 EXC_BAD_ACCESS 错误时的奇怪问题【英文标题】:Strange problem when Comparing NSDate values and EXC_BAD_ACCESS error 【发布时间】:2011-02-28 15:38:48 【问题描述】:

我正在开发一个程序,该程序比较日期值,如果新选择的日期小于 dateStart,则设置开始日期,如果新选择的日期大于 dateStart,则设置 dateEnd。

当我选择更大的值(设置 dateEnd 时)时代码运行良好,但当我尝试设置 dateStart 时程序崩溃。这是我的代码:

- (void)setDate:(NSDate *)dateVal

    NSComparisonResult result = [dateVal compare:dateStart];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd.MM.yyyy 00:00:00"];

    switch (result)
    
        case NSOrderedAscending: 
        
            dateStart = dateVal;
            [dateFormatter setDateFormat:@"dd.MM.yyyy 00:00:00"];
            [lblDateStart setText:[dateFormatter stringFromDate:dateStart]];
         break;
        case NSOrderedDescending: 
            dateEnd = dateVal;
            [dateFormatter setDateFormat:@"dd.MM.yyyy 23:59:59"];
            [lblDateEnd setText:[dateFormatter stringFromDate:dateEnd]];
         break;
        case NSOrderedSame: NSLog(@"%@ is the same as %@", dateStart, dateVal); break;
        default: NSLog(@"erorr dates %@, %@", dateStart, dateVal); break;
    

代码在

处给出EXC_BAD_ACCESS错误

NSComparisonResult 结果 = [dateVal 比较:日期开始];

当我从日历视图中选择一个较小的日期值时。

我在开始时都将 dateStart 和 dateEnd 设置为属性,并为它们设置了 [[NSDate alloc] init]。请帮忙。

【问题讨论】:

两件事。您是否尝试过使用 Zombies 调试代码,dateVal 是否可能是指向您之前发布的内容的指针? Nicholas,我通过将 dateStart = dateVal 更改为 [self setdateStart:dateVal] 解决了这个问题,我意识到这不是分配日期的正确方法。感谢您的帮助。 【参考方案1】:

好吧,伙计们,我终于意识到了这个问题。

问题出在这一行:

dateStart = dateVal;

但它必须是这样的:

[self setdateStart:dateVal];

谢谢,祝你有美好的一天。

【讨论】:

以上是关于比较 NSDate 值和 EXC_BAD_ACCESS 错误时的奇怪问题的主要内容,如果未能解决你的问题,请参考以下文章

比较两个NSDate类型的参数相差的时间差

如何在 NSArray 中检查 NSDate yyyy/mm/dd 并进行比较?

NSDate 的一些操作(比较创建在现有date加减一定时间等)

带有 groupBy 的 nspredicate 不喜欢带有 nsdate 的谓词比较

NSDate 比较,找出特定(本地)时区的“午夜数”

NSDate.timeIntervalSinceDate 没有节时调整?