1

I do app in swift 2.3 with Realm database and Kingfisher framework to get images. I get images from server by JSON

let urls = NSURL(fileURLWithPath: newsRealm.newsImage)
let prefetcher = ImagePrefetcher(urls: [urls], optionsInfo: nil, progressBlock: nil, completionHandler: {
(skippedResources, failedResources, completedResources) -> () in
print("These resources are prefetched: \(completedResources)")
})
prefetcher.start()

It' is successful, but images in Realm database is NSData, how to write received data from Kingfisher to Realm as NSData

Realm class:

class News: Object {
  dynamic var newsImage: String = ""
  dynamic var images: NSData?
}

Hi! I cant write my images to my database i do:

let urls = NSURL(fileURLWithPath: newsRealm.newsImage)
let prefetcher = ImagePrefetcher(urls: [urls], optionsInfo: nil, progressBlock: nil, completionHandler:
{(skippedResources, failedResources, completedResources) -> () in
print("These resources are prefetched: (completedResources.description)")
let images: [NSData] = completedResources
newsRealm.images = images
Janserik
  • 2,306
  • 1
  • 24
  • 43

2 Answers2

1

Use optionsInfo: [.TargetCache(myCache)] to setup cache url, where you can retrieve the data (as described here), or use an example retrieveImage to retrieve UIImage which can be converted to NSData like here.

Community
  • 1
  • 1
Vyacheslav
  • 26,359
  • 19
  • 112
  • 194
  • Hi! I cant write my images to my database i do: let urls = NSURL(fileURLWithPath: newsRealm.newsImage) let prefetcher = ImagePrefetcher(urls: [urls], optionsInfo: nil, progressBlock: nil, completionHandler: { (skippedResources, failedResources, completedResources) -> () in print("These resources are prefetched: \(completedResources.description)") let images: [NSData] = completedResources newsRealm.images = images – Janserik Oct 24 '16 at 04:15
0

completedResources isn't an array of NSData. completedResources is an array of Resource. Resource holds cacheKey and downloadURL. You should retrieve image using cacheKey from the cache, then convert the image to NSData. Then store the data to Realm.

let images: [NSData] = completedResources.map { (resource) -> NSData in
    let image = ImageCache.default.retrieveImageInDiskCache(forKey: resource.cacheKey)!
    return UIImagePNGRepresentation(image)
}
kishikawa katsumi
  • 10,418
  • 1
  • 41
  • 53