从 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 命令写入的图像丢失

Swift 5 (Xcode 11 Betas 5 & 6) - 如何写入 JSON 文件?

如何使用 PHP 安全地将 JSON 数据写入文件

如何在 xcode 自动布局中使对象自动调整大小?

使用 swift 5 从远程读取 json 内容并在 Xcode 的主界面上打印