深入了解rss阅读器iphone

时间:2009-09-21 17:45:21

标签: iphone objective-c

我做了一个简单的rss阅读器。该应用程序在数组中加载xml原子文件。

现在我已经在我的原子Feed中添加了类别,这些类别首先加载到数组

以编程方式添加向下钻取功能的最佳方法是什么。 现在只有类别被加载到数组中并显示出来。

这是实施代码

.....
loading xml file <snip>
.....

    - (void)parserDidStartDocument:(NSXMLParser *)parser {
        NSLog(@"found file and started parsing");
    }

    - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
        NSString * errorString = [NSString stringWithFormat:@"Unable to download story feed from web site (Error code %i )", [parseError code]];
        NSLog(@"error parsing XML: %@", errorString);

        UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [errorAlert show];
    }

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
        //NSLog(@"found this element: %@", elementName);
        currentElement = [elementName copy];

        if ([elementName isEqualToString:@"entry"]) {
            // clear out our story item caches...
            Categoryentry = [[NSMutableDictionary alloc] init];
            currentID = [[NSMutableString alloc] init];
            currentTitle = [[NSMutableString alloc] init];
            currentSummary = [[NSMutableString alloc] init];
            currentContent = [[NSMutableString alloc] init];
        }
    }

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

        //NSLog(@"ended element: %@", elementName);
        if ([elementName isEqualToString:@"entry"]) {
            // save values to an entry, then store that item into the array...
            [Categoryentry setObject:currentTitle forKey:@"title"];
            [Categoryentry setObject:currentID forKey:@"id"];
            [Categoryentry setObject:currentSummary forKey:@"summary"];
            [Categoryentry setObject:currentContent forKey:@"content"];

            [categories addObject:[Categoryentry copy]];
            NSLog(@"adding category: %@", currentTitle);
        }
    }

    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
        //NSLog(@"found characters: %@", string);
        // save the characters for the current item...
        if ([currentElement isEqualToString:@"title"]) {
            [currentTitle appendString:string];
        } else if ([currentElement isEqualToString:@"id"]) {
            [currentID appendString:string];
        } else if ([currentElement isEqualToString:@"summary"]) {
            [currentSummary appendString:string];
        } else if ([currentElement isEqualToString:@"content"]) {
            [currentContent appendString:string];
        }
    }

    - (void)parserDidEndDocument:(NSXMLParser *)parser {

        [activityIndicator stopAnimating];
        [activityIndicator removeFromSuperview];

        NSLog(@"all done!");
        NSLog(@"categories array has %d entries", [categories count]);
        [newsTable reloadData];
    }

3 个答案:

答案 0 :(得分:2)

Apple提供了一个很好的示例应用程序,用于演示下钻表格视图:

SimpleDrillDown

答案 1 :(得分:1)

编写一个带有值数组的通用UITableViewController子类。然后,当用户点击一行时,获取与所选类别关联的帖子数组,并将其传递给新的视图控制器。然后,使用[[self navigationController] pushViewController:nextViewController animated:YES];将视图控制器推入堆栈。

答案 2 :(得分:1)

我刚刚发布了一个开源RSS/Atom Parser for iPhone,希望它可能有用。

我也很乐意听到你的想法!