我正在学习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);
});
}
答案 0 :(得分:1)
您可以将下载的数据保存在NSUserDefaults
中,也可以使用CoreData
或sqlite 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友好的格式。