How to put an image in a Realm database?

前端 未结 2 2016
盖世英雄少女心
盖世英雄少女心 2020-11-28 04:31

I\'m writing an iOS application using Swift 2 and I would like to save profile picture of an account locally in a Realm database. I can\'t find any documentation or people t

2条回答
  •  野性不改
    2020-11-28 05:22

    You can store images as NSData. Given you have the URL of an image, which you want to store locally, here is a code snippet how that can be achieved.

    class MyImageBlob {
        var data: NSData?
    }
    
    // Working Example
    let url = NSURL(string: "http://images.apple.com/v/home/cb/images/home_evergreen_hero_iphone_medium.jpg")!
    if let imgData = NSData(contentsOfURL: url) {
        var myblob = MyImageBlob()
        myblob.data = imgData 
    
        let realm = try! Realm()
        try! realm.write {
            realm.add(myblob)
        }
    }
    

    May be it is a bad idea to do that?

    The rule is simple: If the images are small in size, the number of images is small and they are rarely changed, you can stick with storing them in the database.

    If there is a bunch images, you are better off writing them directly to the file system and just storing the path of the image in the database.

    Here is how that can be done:

    class MyImageStorage{
        var imagePath: NSString?
    }
    
    let url = NSURL(string: "http://images.apple.com/v/home/cb/images/home_evergreen_hero_iphone_medium.jpg")!
    if let imgData = NSData(contentsOfURL: url) {
        // Storing image in documents folder (Swift 2.0+)
        let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
        let writePath = documentsPath?.stringByAppendingPathComponent("myimage.jpg")
    
        imgData.writeToFile(writePath, atomically: true)
    
        var mystorage = MyImageStorage()
        mystorage.imagePath = writePath
    
        let realm = try! Realm()
        try! realm.write {
             realm.add(mystorage)
        }
    }
    

    Please note: Both code samples are not reliable methods for downloading images since there are many pitfalls. In real world apps / in production, I'd suggest to use a library intended for this purpose like AFNetworking or AlamofireImage.

提交回复
热议问题