使用isEqualToDate时出现“无法识别的选择器”错误:使用NSXMLParser获取日期信息时的[NSDate日期]

时间:2012-12-03 16:45:04

标签: ios nsdate nsdictionary nsxmlparser

在我的项目中,我使用NSXMLParser从XML字符串中获取日期列表。解析器将信息放入的对象(称为DatesXML)具有

@property (nonatomic,strong) NSDate *DATE;
@property (nonatomic,strong) NSString *NAME;

在许多其他属性中。

我的解析器将返回DatesXML对象的数组(名为dateItemsFromXML)。解析器完成后,我做

NSMutableDictionary *datesFromXMLDictionary = [[NSMutableDictionary alloc] init];
for (DatesXML *item in dateItemsFromXML)
{
    [datesFromXMLDictionary setValue:item.DATE forKey:item.NAME];
}

后来,我做了

if ([[datesFromXMLDictionary objectForKey:@"OneOfMyNames"] isEqualToDate:[NSDate date]])

我在这个if语句中遇到“无法识别的选择器”错误。我输入了一个断点,当我将po [datesFromXMLDictionary objectForKey:@"OneOfMyNames"]放入控制台时,我得到(id) ... 12/3/2012

为什么控制台告诉我它是一个id对象而不是NSDate对象?将信息放入字典(或其他任何地方)时,这些信息是否会丢失?

1 个答案:

答案 0 :(得分:0)

Matthias Bauch在评论中指出,问题的根源最终是因为我的.DATE属性中有一个NSString。当解析器加载我的DatesXML对象时,它默认将所有内容作为字符串加载。结果,它使用字符串加载我的.DATE属性(并且默默地这样做),即使.DATE应该是NSDate。

我将NSDateFormatter放入我的解析器中,将字符串从xml转换为NSDate,然后将该NSDate放入我的.DATE属性中。这消除了我得到的错误,当我尝试在我的代码中的其他地方使用.DATE属性时,我得到了我所期望的所有行为。