我有以下代码,我在比较两个字符串但它的抛出异常。
- (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];
}
任何人都可以建议。谢谢。
答案 0 :(得分:2)
将NSDate
对象转换为NSString
不会使其成为字符串。要比较日期,您必须使用NSString
将NSDate
转换为NSDateFormatter
。之后,您可以使用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]) {
...
}
答案 1 :(得分:1)
d
的类型为NSDate
而不是NSString
,因此-isEqualToString:
会导致崩溃。
你不应该在这里比较字符串,而是日期。使用NSDate的-compare:
方法并更改
NSString *selectedDate = @"2013-02-04 00:00:00 +0000";
到
NSDate *selectedDate = [NSDate ...];
答案 2 :(得分:0)
您正在比较NSDate
和NSString
。您需要先使用日期格式化程序将NSDate
更改为字符串。
答案 3 :(得分:0)
您正在将NSDate对象强制转换为NSString而不进行转换。您必须将NSDate格式化为预期日期格式的字符串,然后才能将其与selectedDate进行比较。有关示例,请参阅this previous answer或this one