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,你将不得不使用NSDateFormatterNSString转换为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]) { ... } 

dNSDatetypes而不是NSString ,因此-isEqualToString:导致崩溃。
你不应该在这里比较string,而是date。 使用NSDate的-compare:方法并更改

 NSString *selectedDate = @"2013-02-04 00:00:00 +0000"; 

 NSDate *selectedDate = [NSDate ...]; 

您正在将一个NSDate对象转换为NSString而不进行转换。 您必须将NSDate格式化为预期的date格式,然后才能将其与selectedDate进行比较。 看到这个以前的答案或这个例子

你正在比较NSDateNSString 。 您需要先使用date格式化程序将NSDate更改为string。