【问题标题】:Enumerate thru items in XML feed枚举 XML 提要中的项目
【发布时间】:2016-11-08 22:14:02
【问题描述】:

我有一个显示 XML 提要结果的集合视图。它工作得很好,但我需要在本地保存 XML 提要的结果(例如,如果没有可用的互联网连接)。

我知道如何在本地保存原始提要,但我认为我真正需要做的是遍历 XML 提要中的项目并将每个项目保存为 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];
    }
}

这是提要的示例,我也将其存储在 Documents 目录中,名称为 localdata.plist

(
        {
        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";
    },

【问题讨论】:

  • 为什么不直接保存 XML?
  • @Wain 您是说将 XML 保存在属性列表中,还是其他的?在那种情况下,我不确定它的效果如何,因为最终在提要中也会有照片,我需要将它们转换为 NSData 项目,而不是/另外,对吗?
  • 照片在 XML 中的格式如何? base64 编码的字符串?
  • @Wain 是的,照片将采用 base64 编码

标签: ios objective-c xml nsxmlparser


【解决方案1】:

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

如果您想保存处理后的内容,那么您的 XML 应该被转换为模型对象数组,您可以在这些模型对象上实现 NSCoding 以允许您将它们存档到磁盘。这应该更高效,但也需要更多代码。

【讨论】:

  • 太棒了。如果允许,我会在 11 小时内给你赏金。
  • 我可以问你一个简单的问题,如果照片不是 base64 编码的字符串,解决方案会有很大不同吗?
  • 通常在这种情况下,提要会包含诸如下载图像的链接之类的内容,因此 XML 提要不会包含实际图像。因此,无论哪种情况,它都不会改变您的存储空间,具体取决于您下载图像的时间。您可能会使用单独的图像缓存系统并使其远离 XML。
  • 就像图像存储在 XML 提要中的 URL 中一样,所以我需要遍历提要,找到这些 URL 并将它们转换为 NSData 并分别在本地存储它们,因为如果没有互联网连接,我正在尝试让它到哪里仍然显示所有内容?
  • 是的,但我会使用 SDWebImage 之类的东西,而不是自己编写
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多