0

在我的项目中,我使用 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 对象?将这些信息放入字典(或其他任何地方)时是否会丢失该信息?

4

1 回答 1

0

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

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

于 2012-12-06T18:00:59.607 回答