Ios 如何实现JSON的脱机缓存?
我正在构建一个类似TechCrunch的文章阅读应用程序。我正在从服务器获取JSON内容的数据,并在UITableView中显示JSON内容,如文章图像、标题和作者姓名 当用户单击一篇文章时,它会在UIWebView中打开 我已经通过segue传递了文章的标题、作者姓名和内容,我已经在UITableView中获取了这些信息 在我的项目AFNetworking中,我集成了第三方库。我想实现文章的离线缓存,这意味着如果没有互联网用户可以阅读文章 这是我的代码: TableView.mIos 如何实现JSON的脱机缓存?,ios,objective-c,json,afnetworking,offline-caching,Ios,Objective C,Json,Afnetworking,Offline Caching,我正在构建一个类似TechCrunch的文章阅读应用程序。我正在从服务器获取JSON内容的数据,并在UITableView中显示JSON内容,如文章图像、标题和作者姓名 当用户单击一篇文章时,它会在UIWebView中打开 我已经通过segue传递了文章的标题、作者姓名和内容,我已经在UITableView中获取了这些信息 在我的项目AFNetworking中,我集成了第三方库。我想实现文章的离线缓存,这意味着如果没有互联网用户可以阅读文章 这是我的代码: TableView.m
- (void)viewDidLoad
{
[super viewDidLoad];
tempJson = [[NSMutableArray alloc] init];
[self.tableView reloadData];
NSString *jsonLink=[NSString stringWithFormat:@“www.example.com&page=1"];
NSURL *url = [[NSURL alloc] initWithString:jsonLink];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSArray *jsonArray = (NSArray *)responseObject;
for (NSDictionary *dic in jsonArray) {
Json *json = [[Json alloc] initWithDictionary:dic];
[tempJson addObject:json];
}
self.jsons = [[NSArray alloc] initWithArray:tempJson];
[self.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
}];
[operation start];
[self.tableView addInfiniteScrollingWithActionHandler:^{
}];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"ShowDetails1"]) {
Webview *ysdetailviewcontroller = [segue destinationViewController];
NSIndexPath *myindexpath1 = [self.tableView indexPathForSelectedRow];
long row1 = [myindexpath1 row];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
ysdetailviewcontroller.DetailModal1 = @[[self.jsons[row1] title], [self.jsons[row1] author],[self.jsons[row1] a_image],[self.jsons[row1] content], [self.jsons[row1] link],[self.jsons[row1] date]];
});
}
}
Webview.m
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *Title=[NSString stringWithFormat:@"<div style=\"line-height:80px;font-size:70px;font-family: Helvetica, Arial, Sans-Serif;font-weight:600;padding-left:40px; !important;padding-right:40px; !important;\">%@</div>", _DetailModal1[0]];
NSString *AuthorName=[NSString stringWithFormat:@"<div><div style=\"color:#9E9E9E;line-height:70px;font-size:35px;font-family: Helvetica, Arial, Sans-Serif;font-weight:800;float:left;float:left;text-align:left;padding-left:40px; !important;\">%@  </div>",_DetailModal1[1]];
NSString *Date=[NSString stringWithFormat:@"<div style=\"line-height:70px;font-size:35px;font-family: Helvetica, Arial, Sans-Serif;font-weight:200;\">%@</div></div><br><br>",_DetailModal1[5]];
NSString *url=[[NSString alloc] initWithString:_DetailModal1[3] ];//_DetailModal1[3] contains article content
NSString *javaScriptStar=@"<!DOCTYPE html><html><head><body></head><div style = \"line-height:70px !important;font-size:52px !important;font-family: Helvetica, Arial, Sans-Serif;font-weight:400;padding-left:40px; !important;padding-right:40px; !important;\">";
NSString *javaScriptEnd=@"</font></div></body></html>";
NSString *javaScriptLink=@"<body link=\"#3366CC\”>";
NSString *javaScriptDec=@"<style type=\"text/css\">a {text-decoration: none; font-weight:bold; }img { display: block;margin-left: auto; margin-right: auto;margin-top: 8px;margin-bottom: 8px; width : 800px !important;height:auto;}</style>";
NSString* myURLString = [NSString stringWithFormat:@"%@%@%@%@%@%@%@%@",Title,AuthorName,Date, javaScriptDec, javaScriptLink,javaScriptStar,url,javaScriptEnd];
NSString *htmlString = [myURLString stringByReplacingOccurrencesOfString:@"src=\"//" withString:@"src=\"https://"];
_webView.delegate = self;
[_webView loadHTMLString:htmlString baseURL:nil];
}
-(void)viewDidLoad
{
[超级视图下载];
NSString*Title=[NSString stringWithFormat:@“%@”,_DetailModal1[0]];
NSString*AuthorName=[NSString stringWithFormat:@“%@ ,_DetailModal1[1]];
NSString*Date=[NSString stringWithFormat:@“%@
”,[U DetailModal1[5]];
NSString*url=[[NSString alloc]initWithString:_DetailModal1[3]];//_DetailModal1[3]包含文章内容
NSString*javaScriptStar=@;
NSString*javaScriptEnd=@;
NSString*javaScriptLink=@"将数据持久化到磁盘的方法有很多:例如,您可以使用核心数据或原始SQLite。对于这样简单的事情,最简单的方法是将JSON字符串写入文件,并在您想要显示文章时将其读回。看看Apple的。您可能想看看。因为AFNetworking是在f NSURLConnection在应用程序委托中设置缓存应该完全按照您尝试执行的操作