【问题标题】:Parsing feed, what's the best way to save it locally?解析提要,将其保存在本地的最佳方法是什么?
【发布时间】:2014-07-03 14:07:16
【问题描述】:

我正在学习 Objective-C 并做一些个人项目应用程序。

我正在解析新闻提要并在表格视图中显示,一切正常。 但是每次我打开应用程序时,我都必须再次加载整个提要,并再次加载所有新闻。

我想知道,将这些新闻保存在本地存储中的最佳方法是什么,每次我打开应用程序时,只需检查提要以查看是否有新新闻并补充本地存储,这样我就可以填写只有本地保存新闻的tableview?

现在我正在使用 RaptureXML 来遍历项目并这样做:

-(void)fetchRssWithURL:(NSURL*)url complete:(RSSLoaderCompleteBlock)c{
    dispatch_async(kBgQueue, ^{

        RXMLElement *rss = [RXMLElement elementFromURL: url];
        RXMLElement* title = [[rss child:@"channel"] child:@"title"];
        NSArray* items = [[rss child:@"channel"] children:@"item"];

        NSMutableArray* result = [NSMutableArray arrayWithCapacity:items.count];
        cachedImages = [[NSMutableArray alloc] init];

        if(items) {
            for (RXMLElement *e in items) {
                RSSItem* item = [[RSSItem alloc] init];
                item.title = [[e child:@"title"] text];
                item.description = [[e child:@"description"] text];
                item.link = [NSURL URLWithString: [[e child:@"link"] text]];
                item.content = [[e child:@"encoded"] text];
                [result addObject: item];
            }
        }

        c([title text], result);
    });
}

【问题讨论】:

    标签: ios objective-c xcode xml-parsing feed


    【解决方案1】:

    执行此 IMO 的最简单方法是将您的提要数据格式化为嵌套的 NSArray/NSDictionary 结构并将其直接写入磁盘。如果你坚持使用 Foundation 数据类型,那么文件会很小并且是 plist 格式。

    如果您将数据存储为数组,您可以通过执行以下操作将文件写入磁盘

    [array writeToFile:[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"localdata.plist"] atomically:YES];
    

    您可以使用类似的方法检查文件是否存在

    if (![[NSFileManager defaultManager] fileExistsAtPath:path]){}
    

    如果找到文件

    [[NSArray arrayWithContentsOfFile:yourFile] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    }
    

    将数据处理成对您的表格视图友好的格式。

    【讨论】:

      【解决方案2】:

      您可以将下载的数据持久化到NSUserDefaults,也可以使用CoreDatasqlite database 来持久化数据。

      每次启动应用程序时,检查数据是否持久化而不是使用该持久化数据并在后台更新它,因此用户无需等到数据来自 RSS 提要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-13
        • 2019-09-16
        • 1970-01-01
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多