枚举XML Feed中的项目

时间:2016-07-06 18:24:50

标签: ios objective-c xml nsxmlparser

我有一个集合视图,显示XML Feed的结果。它运行良好,但我需要在本地保存XML提要的结果(例如,如果没有可用的Internet连接)。

我知道如何在本地保存原始Feed,但我认为我真正需要做的是通过XML Feed中的项目进行迭代并将每个项目保存为NSData项目

这是考虑它的正确方法,还是您有任何有用的建议或提示?

- (void)startParsing
{
    NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://images.apple.com/main/rss/hotnews/hotnews.rss#sthash.TyhRD7Zy.dpuf"]];
    [xmlparser setDelegate:self];
    [xmlparser parse];
    if (_marrXMLDataCollection.count != 0) {
        // Save XML to NSData items in background?

        [self.collectionView reloadData];
    }
}

以下是Feed的示例,我将其作为localdata.plist存储在Documents目录中:

(
        {
        link = "\nhttp://www.apple.com/pr/library/2016/04/26Apple-Reports-Second-Quarter-Results.html?sr=hotnews.rss";
        pubDate = "\nTue, 26 Apr 2016 14:44:21 PDT";
        title = "\nApple Reports Second Quarter Results";
    },
        {
        link = "\nhttp://www.apple.com/final-cut-pro/in-action/trim-editing/?sr=hotnews.rss";
        pubDate = "\nWed, 20 Apr 2016 10:05:59 PDT";
        title = "\n\nFinal Cut Pro X helps small company delight world\U2019s biggest clients";
    },
        {
        link = "\nhttp://www.apple.com/ipad-pro/?sr=hotnews.rss";
        pubDate = "\nMon, 21 Mar 2016 12:00:03 PDT";
        title = "\n\nApple Introduces 9.7-inch iPad Pro";
    },
        {
        link = "\nhttp://www.apple.com/iphone-se/?sr=hotnews.rss";
        pubDate = "\nMon, 21 Mar 2016 11:58:09 PDT";
        title = "\n\nApple Introduces iPhone SE \U2014 the Most Powerful Phone with a 4-inch Display";
    },

1 个答案:

答案 0 :(得分:1)

您可以将XML直接保存到文件中,可以是二进制数据或文本。您不需要打开它并将其转换为任何东西。稍后您可以加载罚款并重新运行解析代码。这是最少的代码选项。它的运行时间更加昂贵,但除非你的XML文件相当大,否则你不会注意到差异。

如果要保存已处理的内容,则应将XML转换为模型对象数组,并且可以在这些模型对象上实现NSCoding以允许将其存档到磁盘。这应该是更高的运行时效率,但也是更多的代码。