Ios SwiftData错误NSFileManager

Ios SwiftData错误NSFileManager,ios,swift2,nsfilemanager,Ios,Swift2,Nsfilemanager,我正在从Swift 1.2更新到Swift 2,经过一些更改和更正后,我仍然有一个错误,我无法理解为什么会发生 代码如下所示: public static func saveUIImage(image: UIImage) -> String? { let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask

我正在从Swift 1.2更新到Swift 2,经过一些更改和更正后,我仍然有一个错误,我无法理解为什么会发生

代码如下所示:

    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

}
在“do{”行上,Xcode抛出以下错误:

无法使用类型为“”的参数列表调用“createDirectoryAtPath”(字符串,WithIntermediateDirectory:Bool,attributes:u,error:u)“”

知道为什么会这样吗?我快疯了

致以亲切的问候,并提前表示感谢


在我的Xcode 7.2中没有:

let imageDirPath = docsPath.stringByAppendingPathComponent("SwiftDataImages")
所以我尝试了这段代码,它编译得很好:

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
}

苹果强烈建议使用
NSFileManager
NSData
的URL相关API

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

  let fileManager = NSFileManager.defaultManager()
  let docsURL = try! fileManager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
  let imageDirURL = docsURL.URLByAppendingPathComponent("SwiftDataImages")

  if !fileManager.fileExistsAtPath(imageDirURL.path!) {
    do {
      try fileManager.createDirectoryAtURL(imageDirURL, withIntermediateDirectories: false, attributes:nil)
    } catch let error as NSError{
      print("Error creating SwiftData image folder", error)
      return nil
    }
  }

  let imageID = NSUUID().UUIDString
  let imageURL = imageDirURL.URLByAppendingPathComponent(imageID)
  let imageAsData = UIImagePNGRepresentation(image)
  if !imageAsData!.writeToURL(imageURL, atomically: true) {
    print("Error saving image")
    return nil
  }
  return imageID
}

即使我将属性设置为nil,错误仍然会发生奇怪..我没有收到错误消息。你的Xcode版本是什么?最新版本。这个类有很多我正在修复的编译错误。这可能是一个Xcode错误,因为我有很多代码要迁移到swift 2并奇怪地检测错误?是的!尝试清除他再次投影和重建也首先解决了其他问题。这可能会有所帮助。我会这样做。谢谢。我已经添加了一个字符串扩展名,因为该方法在swift 2上不可用,但仅在swift 1.2
中可用。absoluteString
将不起作用,因为它会将
文件://
方案前缀添加到API未使用的路径中站着。嗯……没想过。谢谢你的小费。