2014-07-03 186 views
0

我正在学习Objective-C并执行一些个人项目应用程序。分析Feed时,本地保存的最佳方式是什么?

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

我想知道,在本地存储器中保存这些消息的最佳方式是什么,每当我打开应用程序时,只需检查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); 
    }); 
} 

回答

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友好。

1

您可以NSUserDefaults坚持你下载的数据,也可以使用CoreDatasqlite database坚持数据。

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

相关问题