解析feed,在本地保存它的最佳方法是什么?

时间:2014-07-03 14:07:16

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

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

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

我想知道,在本地存储中保存这些新闻的最佳方式是什么,每次我打开应用程序时,只需检查Feed以查看是否有新消息并补充本地存储,这样我就可以填写只有本地保存的新闻的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);
    });
}

2 个答案:

答案 0 :(得分:1)

您可以将下载的数据保存在NSUserDefaults中,也可以使用CoreDatasqlite database来保存数据。

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

答案 1 :(得分:1)

执行此操作的最简单方法是将Feed数据格式化为嵌套的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) {
}

将数据处理为对您的tableview友好的格式。