【问题标题】:NSString compare is throwing exception SIGABTNSString 比较抛出异常 SIGABT
【发布时间】:2013-01-16 15:34:46
【问题描述】:

我有以下代码,我正在比较两个字符串,但它抛出异常。

- (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];

}

谁能推荐一下。谢谢。

【问题讨论】:

  • 请发布堆栈跟踪。
  • 我认为问题在于 NSString tempDate = (NSString)d;如果你想检查两个日期,那么 NSDate 就可以使用该功能。
  • 谁支持这个愚蠢的问题?

标签: iphone ios objective-c nsstring nsdate


【解决方案1】:

NSDate 对象转换为NSString 不会使其成为字符串。要比较日期,您必须使用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]) {
   ...
}

【讨论】:

  • 感谢此代码。我的“d”以“2013-02-04 04:30:00 IST”格式出现。而且,比较失败。所以,它不会进入 if 语句。注意:我正在使用日历来选择我的日期。
  • 使用什么格式来创建日期并不重要,最后你有 2 个 NSDate 对象代表一个日期(任何格式)。请深入解释您的问题。
  • 问题是:使用“NSDate *actualDate = [dateFormatter dateFromString:selectedDate];”之后我的日期显示“actualDate = 2013-01-04”。使用 dateFormatter 后如何回到一月?
  • 感谢您的帮助。我只是将格式更改为: [dateFormatter setDateFormat:@"yyyy-MM-DD hh:mm:ss zzzz"];因为,我的时区是 GMT+5.30。现在可以正常工作了。
【解决方案2】:

d 的类型是 NSDate 而不是 NSString,因此 -isEqualToString: 会导致崩溃。
您不应该在这里比较字符串,而是比较日期。使用 NSDate 的-compare: 方法并更改

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

NSDate *selectedDate = [NSDate ...];

【讨论】:

  • 您能请教一下吗?告诉我应该在“[NSDate ...];”之间写什么
  • 这取决于您要比较的日期。您可以使用 NSCalendar 创建特定日/月/年的日期,或使用 @Stavash 发布的内容将字符串转换为日期。
【解决方案3】:

您将 NSDate 对象转换为 NSString 而不进行转换。您必须将 NSDate 作为字符串格式化为您的预期日期格式,然后才能将其与您的 selectedDate 进行比较。有关示例,请参见 this previous answerthis one

【讨论】:

    【解决方案4】:

    您正在比较 NSDateNSString。您需要先使用日期格式化程序将 NSDate 更改为字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多