Search code examples
iosswiftuiimagewritetofile

writeToFile in documents directory not updating until I restart the app


I am using the documents directory of my application to cache images locally, but when I go to access them, they are not updated until I close the app and reopen.

Here is my save:

    var readPath = ""
    let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
    let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
    if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) {
        if paths.count > 0 {
            if let dirPath = paths[0] as? String {
                readPath = dirPath.stringByAppendingPathComponent("\(user).png")
                UIImagePNGRepresentation(imageView.image).writeToFile(readPath, atomically: true)
            }
        }
    }

Here is my retrieval:

    var readPath = ""
    let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
    let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
    if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) {
        if paths.count > 0 {
            if let dirPath = paths[0] as? String {
                readPath = dirPath.stringByAppendingPathComponent("\(user).png")

                //UIImagePNGRepresentation(imageView.image).writeToFile(readPath, atomically: true)
            }
        }
    }

    let cachedImage = UIImage(named: readPath)

    if (cachedImage != nil)
    {
        println("cached")
        self.userPictures.append(cachedImage!)

    }

For some reason though, it is not until I have reset the application that these resources become available.

Can anyone shed some light on why this could be?

The image that gets returned to cachedImage is an image that I had previously saved into that specific path btw


Solution

  • This may helps you....

        let fileManager = NSFileManager.defaultManager()
    
        var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
    
        var getImagePath = paths.stringByAppendingPathComponent("\(fileName).png")
    
        if (fileManager.fileExistsAtPath(getImagePath))
        {
            println("FILE AVAILABLE");
    
            //Pick Image and Use accordingly
            var imageis: UIImage = UIImage(contentsOfFile: getImagePath)!
    
            self.image = imageis // UIImageView Class
    
            let datas: NSData = UIImagePNGRepresentation(imageis)
        }
        else
        {
            println("FILE NOT AVAILABLE");
    
            let getImage =  UIImage(data: self.data)
            self.image = getImage
            var filePathToWrite = "\(paths)/\(fileName).png"
    
            var imageData: NSData = UIImagePNGRepresentation(self.image)
    
            fileManager.createFileAtPath(filePathToWrite, contents: imageData, attributes: nil)
    
        }
    

    Check the Project in Github