如何在CoreData中保存和获取JSON图像URL,以便脱机显示在Swift的tableView中

如何在CoreData中保存和获取JSON图像URL,以便脱机显示在Swift的tableView中,json,uitableview,core-data,swift3,uiimageview,Json,Uitableview,Core Data,Swift3,Uiimageview,在下面的JSON代码中,我能够在label中保存和获取文本值,但无法在tableView中显示图像。请帮助我将字符串转换为NSData,并将NSData提取为字符串 这是JSON { "actors": [ { "name": "Brad Pitt", "description": "William Bradley 'Brad' Pitt is an American actor and film producer. He has received a Golden Globe Awar

在下面的JSON代码中,我能够在label中保存和获取文本值,但无法在tableView中显示图像。请帮助我将字符串转换为NSData,并将NSData提取为字符串

这是JSON

{
"actors": [
{
  "name": "Brad Pitt",
  "description": "William Bradley 'Brad' Pitt is an American actor and film producer. He has received a Golden Globe Award, a Screen Actors Guild Award, and three Academy Award nominations in acting categories",
  "dob": "December 18, 1963",
  "country": "United States",
  "height": "1.80 m",
  "spouse": "Jennifer Aniston",
  "children": "Shiloh Nouvel Jolie-Pitt, Maddox Chivan Jolie-Pitt",
  "image": "http://microblogging.wingnity.com/JSONParsingTutorial/brad.jpg"
}, ....
下面介绍如何在CoreData中保存图像url,并在tableView中获取图像

这是struct

struct JsonData {

var nameS: String?
var picS: String?
var spouseS: String?

    init(name: String, image: String, spouse: String) {

    self.nameS = name
    self.picS = image
    self.spouseS = spouse
}
}
为了省钱,我这样做了。如果这是错误的,请建议我如何保存

 let actors = jsonObj["actors"] as! [[String: Any]]
   for actor in actors {
       let name = actor["name"] as! String
       let pic = actor["image"] as! String
       let spouse = actor["spouse"] as! String

        let coreData = NSEntityDescription.insertNewObject(forEntityName: "Actor", into: self.context) as! Actor
                coreData.name = name
                coreData.spouse = spouse

                //Converting NSString to NSData
                let data = pic.data(using: .utf8)

                //assigning NSData value to core data attribute
                coreData.image = data! as NSData//picNSData as NSData
                print("core data saved images \(coreData.image!)")
            }
在取东西的时候,我试着这样做

   func fetchData() {
    do {
        let fetchRequest : NSFetchRequest<Actor> = Actor.fetchRequest()
        let actors = try context.fetch(fetchRequest)

        if actors.count > 0 {

            for actor in actors as [Actor] {
                let nameCore = actor.value(forKey: "name")
                let spouseCore = actor.value(forKey: "spouse")

                //here imageData contains nsdata
                let imageData = actor.value(forKey: "image")
                //converting NSData to String for append JsonData Struct
                let imageCore = String(describing: imageData!)
                print("we r in fetch image.. \(imageCore)")

                self.iteamsArray.append(JsonData(name: nameCore as! String, image: imageCore , spouse: spouseCore as! String))
            }
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
        else {
            downloadJsonwithImages()
        }
    } catch { print(error) }
}
为了下载图像,我使用了这个工具,并在项目中安装了sdwebimage pod

// MARK: - UIImageView
extension UIImageView{

func setImageFromURl(stringImageUrl url: String){

    if let url = NSURL(string: url) {
        if let data = NSData(contentsOf: url as URL) {

            DispatchQueue.main.async {
                self.image = UIImage(data: data as Data)
            }
        }
    }
}
}

请帮助我在脱机时在tableview中显示图像。

为什么坚持将url字符串转换为NSData?这是一个字符串,没有其他内容。@JoakimDanielson bcoz要在coredata中保存图像url,我不能将字符串值分配给BinaryData。这不是二进制数据,它是图像文件的url,而不是图像本身。查看
setImageFromURl
中的代码,可以使用字符串创建URL,而不是二进制数据。在json消息中,您得到的是一个url字符串,而不是二进制数据。@JoakimDanielson好的,那么如何在tableview中获得二进制数据,即使我已经添加了sdwebimage pod,但我无法在TableView中显示图像将从actors->image json字段获得的url保存为核心数据中的字符串,然后在以后调用
setImageFromURl
时使用该字符串,或者在解码json后直接使用相同的url,然后调用
setImageFromURl
,然后保存下载的内容核心数据中的图像文件。
// MARK: - UIImageView
extension UIImageView{

func setImageFromURl(stringImageUrl url: String){

    if let url = NSURL(string: url) {
        if let data = NSData(contentsOf: url as URL) {

            DispatchQueue.main.async {
                self.image = UIImage(data: data as Data)
            }
        }
    }
}
}