我正在尝试使用来自几个单独的RSS供稿的文章标题NSXMLParser
填充UITableView
:
for (NSString* feedString in [[NSUserDefaults standardUserDefaults] objectForKey:@"RSSFeeds"])
{
NSURL *url = [NSURL URLWithString:feedString];
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
element = elementName;
if ([element isEqualToString:@"item"])
{
item = [[NSMutableDictionary alloc] init];
title = [[NSMutableString alloc] init];
link = [[NSMutableString alloc] init];
}
}
如果只有一个RSS提要,这似乎很好用,但是一旦有多个RSS提要,则第二个提要中的第一个标题将附加到第一个提要中的最后一个标题,并且它们在表视图中共享相同的单元格。
我认为此方法是问题的核心,但正在努力使其正常工作:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([element isEqualToString:@"title"])
{
[title appendString:string];
}
else if ([element isEqualToString:@"link"])
{
[link appendString:string];
}
}
我很欣赏我可能忽略了一些显而易见的事情,但任何指针都将不胜感激。
我的didEnd
代码:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"item"])
{
[item setObject:title forKey:@"title"];
[item setObject:link forKey:@"link"];
[feeds addObject:[item copy]];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
[self.tableView reloadData];
}
注意:不是最优化的解决方案,但应该可以使用(我稍后会对其进行编辑)
for (NSString* feedString in [[NSUserDefaults standardUserDefaults] objectForKey:@"RSSFeeds"])
{
NSURL *url = [NSURL URLWithString:feedString];
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
//declare "NSMutableString *strCurrent;" in the .h of this class
strCurrent = [NSMutableString alloc] init];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[strCurrent appendString:string];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init];
}
if ([elementName isEqualToString:@"title"]) {
strCurrent = [[NSMutableString alloc] init];
}
if ([elementName isEqualToString:@"link"]) {
strCurrent = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"title"]) {
[item setObject:strCurrent forKey:@"title"];
}
if ([elementName isEqualToString:@"link"]) {
[item setObject:strCurrent forKey:@"link"];
}
if ([elementName isEqualToString:@"item"]) {
[feeds addObject:[item copy]];
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句