比较 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 错误时的奇怪问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NSArray 中检查 NSDate yyyy/mm/dd 并进行比较?
NSDate 的一些操作(比较创建在现有date加减一定时间等)