Search code examples
iosswift2nsfilemanager

SwiftData Error NSFileManager


I'm updating SwiftData from Swift 1.2 to Swift 2 and after some changes and corrections I'm still having an error that I can't understand why it's happening.

The code goes as the following:

    public static func saveUIImage(image: UIImage) -> String? {

    let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as String
    let imageDirPath = docsPath.stringByAppendingPathComponent("SwiftDataImages")

    if !NSFileManager.defaultManager().fileExistsAtPath(imageDirPath) {

        do {
            try NSFileManager.defaultManager().createDirectoryAtPath(imageDirPath, withIntermediateDirectories: false, attributes: [:])
        } catch {
            print("Error creating SwiftData image folder")
            return nil
        }

    }

    let imageID = NSUUID().UUIDString
    let imagePath = (imageDirPath as NSString).stringByAppendingPathComponent(imageID)
    let imageAsData = UIImagePNGRepresentation(image)
    if !imageAsData!.writeToFile(imagePath, atomically: true) {
        print("Error saving image")
        return nil
    }
    return imageID

}

On the 'do {' line Xcode is throwing the following error:

Cannot invoke 'createDirectoryAtPath' with an argument list of type '(String, withIntermediateDirectories: Bool, attributes: _, error: _)'

Any tips of why this is happening? It's driving me crazy.

Kind regards, and thanks in advance.

;)


Solution

  • In my Xcode 7.2 there is no:

    let imageDirPath = docsPath.stringByAppendingPathComponent("SwiftDataImages")
    

    So I tried this code and it compiles fine:

    public func saveUIImage(image: UIImage) -> String? {
    
        let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as String
        let imageDirPath = NSURL(string: docsPath)?.URLByAppendingPathComponent("SwiftDataImages")
    
        if !NSFileManager.defaultManager().fileExistsAtPath(imageDirPath!.absoluteString) {
    
            do {
                try NSFileManager.defaultManager().createDirectoryAtPath(imageDirPath!.absoluteString, withIntermediateDirectories: false, attributes: [:])
            } catch {
                print("Error creating SwiftData image folder")
                return nil
            }
    
        }
    
        let imageID = NSUUID().UUIDString
        let imagePath = (imageDirPath!.absoluteString as NSString).stringByAppendingPathComponent(imageID)
        let imageAsData = UIImagePNGRepresentation(image)
        if !imageAsData!.writeToFile(imagePath, atomically: true) {
            print("Error saving image")
            return nil
        }
        return imageID
    }