NSString比较是抛出exceptionSIGABT
我有下面的代码,我比较两个string,但它的抛出exception。
- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)d { NSLog(@"calendarMonthView didSelectDate %@",d); //[self papulateTable]; //[table reloadData]; //[self performSelector:@selector(papulateTable) withObject:nil afterDelay:1.0]; NSString *tempDate = (NSString*)d; NSString *selectedDate = @"2013-02-04 00:00:00 +0000"; if([tempDate isEqualToString:selectedDate]) { flagtoCheckSelectedCalendarDate = 1; } if(flagtoCheckSelectedCalendarDate == 1) { [self viewDidLoad]; } if(flagtoCheckSelectedCalendarDate == 2) { [self viewDidLoad]; } //[table reloadData];
}
请问任何人请build议。谢谢。
将NSDate
对象转换为NSString
不会使其成为string。 要比较date,你将不得不使用NSDateFormatter
将NSString
转换为NSDate
。 之后,您可以使用NSDate的实例方法isEqualToDate:
进行比较。
NSString *selectedDate = @"2013-02-04 00:00:00 +0000"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; [dateFormatter setDateFormat:@"yyyy-MM-DD hh:mm:ss ZZZZ"]; NSDate *actualDate = [dateFormatter dateFromString:selectedDate]; if ([actualDate isEqualToDate:d]) { ... }
d
是NSDate
types而不是NSString
,因此-isEqualToString:
导致崩溃。
你不应该在这里比较string,而是date。 使用NSDate的-compare:
方法并更改
NSString *selectedDate = @"2013-02-04 00:00:00 +0000";
至
NSDate *selectedDate = [NSDate ...];
您正在将一个NSDate对象转换为NSString而不进行转换。 您必须将NSDate格式化为预期的date格式,然后才能将其与selectedDate进行比较。 看到这个以前的答案或这个例子
你正在比较NSDate
和NSString
。 您需要先使用date格式化程序将NSDate
更改为string。