Can't load image with UIImage or NSData

594 views Asked by At

I am programming a Swift application, and I can't load image saved in the application by using UIImage(contentsOfFile: imgPath) or NSData(contentsOfFile: imgPath)

private func loadData() {
    println("load DATA DANGEROUS")
    let (dangerous, err) = SD.executeQuery("SELECT * FROM Dangerous")
    if err == nil && !dangerous.isEmpty {
        var tabPhoto : [DangerousImage] = []
        for d in dangerous {
            let desc = d["description"]!.asString()!
            let idDangerous = d["id"]!.asInt()!
            println("iddangerous : \(idDangerous)")
            let (photos, error) = SD.executeQuery("SELECT * FROM Photo WHERE idDangerous = ?", withArgs: [idDangerous])
            if error == nil {
                for photo in photos {
                    let imgPath = photo["photoPath"]!.asString()!
                    println(imgPath)
                    let uimage = UIImage(contentsOfFile: imgPath)  // fatal error: unexpectedly found nil while unwrapping an Optional value
                    tabPhoto.append(DangerousImage(img: uimage!, path: imgPath))
                }
            }
            println("add ENTRY")
            self.tabEntry.append(Entry(descript: desc, tab: tabPhoto))
        }
    }
    println("TAB ENTRY : \(tabEntry)")
}

My picture exists with this path : /var/mobile/Containers/Data/Application/...ID-APP.../Documents/images/JPEG_201506162_101128_IOS_99804574.jpg

Thank for your help.

Ysee

1

There are 1 answers

0
graver On BEST ANSWER

From I can see in your code, you are storing the full path to the image in your database, eg. "/var/mobile/Containers/Data/Application/...ID-APP.../Documents/images/JPEG_201506162_101128_IOS_99804574.jpg". Since iOS8, the folder structure has changed - the UDID in the path is changing every time the app is updated or a new build is installed during development. That's why should store a relative path to your image, eg. "/images/JPEG_201506162_101128_IOS_99804574.jpg" and then get the Documents directory with NSSearchPathForDirectoriesInDomains method.