从 JSON 写入/读取图像以在 Xcode 中使用
Posted
技术标签:
【中文标题】从 JSON 写入/读取图像以在 Xcode 中使用【英文标题】:write/read images from JSON for use in Xcode 【发布时间】:2014-04-12 15:14:39 【问题描述】:我有 TableView、画廊和其他项目。因此,当我打开我的应用程序时,我需要保存来自 JSON 的所有图像,并且当我在没有互联网的情况下打开应用程序时,我的图像必须显示。它是如何创建的?我必须做什么?我还有一部分代码用于将 tableViewCell 中的图像显示到 TableView:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
CellForNewsContent *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
CBAutoScrollLabel *captionLabel = [[CBAutoScrollLabel alloc] initWithFrame:CGRectMake(85, 10, 210, 20)];
UILabel *detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(85, 39, 220.0, 20.0)];
detailLabel.tag = 2;
captionLabel.tag = 1;
captionLabel.text = [_news[indexPath.row] valueForKey:@"title"];
captionLabel.scrollSpeed = 7;
[cell addSubview:captionLabel];
[cell addSubview:detailLabel];
UILabel *detailShow = (UILabel*)[cell viewWithTag:2];
detailShow.text = [[_news objectAtIndex:indexPath.row]objectForKey:@"date"];
[cell.imageView setImageWithURL:[NSURL URLWithString:[[_news objectAtIndex:indexPath.row] valueForKey:@"smallimg"]] placeholderImage:[UIImage imageNamed:@"noholder2@2x.png"]];
谢谢。
为图片添加了 JSON:
sliderurl : "http://site/m/miss/load/slider/3c01c445e13582c874bc56619ca47bb8.png"
1
sliderurl : "http://site/m/miss/load/slider/ba17268fa8d7d0f36fa35055960528fd.png"
2
sliderurl : "http://site/m/miss/load/slider/031b22e15228800b22105d4b97043681.png"
3
sliderurl : "http://site/m/miss/load/slider/bf484ddd41f02f8b762b517557760bfb.png"
4
sliderurl : "http://site/m/miss/load/slider/6718b988c4cf5cfb9f40219833d7118f.png"
5
sliderurl : "http://site/m/miss/load/slider/8593df80af29fe8014f9fc176991cb07.png"
6
sliderurl : "http://site/m/miss/load/slider/bf80cff0b085c63ff0416f7118659df6.png"
7
sliderurl : "http://site/m/miss/load/slider/45fbe8a52d174e145b3e98dbf9fa960c.png"
【问题讨论】:
包含图像的 JSON 是什么样的?图片是作为 URL 还是 base 64 编码数据提供的? JSON 有显示图像的键,也可以通过 URL 从 JSON 解析 您能否在问题中添加一些示例 JSON :) 我什么也找不到,只有文字,但图片机器人 你必须有一个你正在解析的 JSON 的 sn-p,不是吗? 【参考方案1】:您想从 JSON 中下载和缓存图像。我推荐使用SDWebImage
。
您可以在获取 JSON 时开始异步下载所有图像,也可以在显示时延迟加载它们。执行后者意味着如果您的图像尚未被查看,则无法离线使用。
获取JSON后全部下载:
for (NSDictionary *item in _news)
NSString *url = item[@"sliderurl"];
[SDWebImageDownloader.sharedDownloader downloadImageWithURL:url options:0 progress:nil completed:nil];
然后在你的表视图数据源方法中:
id url = _news[indexPath.row][@"sliderurl"];
if ([url isEqualTo:[NSNull null]])
// Use placeholder image if no image is given
cell.imageView.image = [UIImage imageNamed:@"noholder2.png"];
else
[cell.imageView setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"noholder2.png"]];
第一个代码 sn -p 将下载所有图像并进行缓存。然后在加载单元格时尝试再次请求图像 - 如果图像已经下载,则使用缓存的图像。
【讨论】:
我现在试试,等我写完结果 你在使用Cocapods吗?它们使添加库变得非常简单! 哦,我刚刚注意到,在您的代码中,您可能已经在使用SDWebImage
,所以添加它应该很容易:)
我已经使用过 SDWebImage,请参阅结构占位符图像。
嗯我有错误..2014-04-12 18:57:31.494 app[18698:70b] -[__NSCFString absoluteURL]: unrecognized selector sent to instance 0xb244e50 2014-04-12 18:57 :31.499 app[18698:70b] ***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString absoluteURL]:无法识别的选择器发送到实例 0xb244e50”***第一次抛出调用堆栈:以上是关于从 JSON 写入/读取图像以在 Xcode 中使用的主要内容,如果未能解决你的问题,请参考以下文章
C 编程和 OpenCV(如何从文件中读取图像并将其加载以在 openCv 中进行进一步处理)
应用重新运行后,通过 WriteToFile 命令写入的图像丢失