2015-10-07 69 views
0

)的参数列表调用'createDirectoryAtPath'当我使用SwiftData框架进行sqlite数据库时,当我将Xcode表单6.4更新为7.0.1时,swift data.swift文件显示此错误不能调用 'createDirectoryAtPath' 与类型的参数列表 '(字符串,withIntermediateDirectories:BOOL,属性:NilLiteralConvertible,错误:NilLiteralConvertible)'。我提供下面的代码无法用类型为'(String,withIntermediateDirectories:B

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) { 
      if !NSFileManager.defaultManager().createDirectoryAtPath(imageDirPath, withIntermediateDirectories: false, attributes: nil, error: nil) { 
       print("Error creating SwiftData image folder") 
       return nil 
      } 
     } 
     let imageID = NSUUID().UUIDString 
     let imagePath = imageDirPath.stringByAppendingPathComponent(imageID) 
     let imageAsData = UIImagePNGRepresentation(image) 
     if !imageAsData!.writeToFile(imagePath, atomically: true) { 
      print("Error saving image") 
      return nil 
     } 
     return imageID 

    } 

回答

2

createDirectoryAtPath语法被改变等。 :

- (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(nullable NSDictionary<NSString *, id> *)attributes error:(NSError **)error NS_AVAILABLE(10_5, 2_0); 

所以,你可以像“更新代码:

NSFileManager.defaultManager().createDirectoryAtPath(imageDirPath, withIntermediateDirectories: false, attributes: [:]) 

你完整的代码与SWIFT 2.0:

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

    let docsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] as String 
    let imageDirPath = (docsPath as NSString).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 
} 

还是因为它不适用于String在2.0,你可以使用扩展stringByAppendingPathComponent

extension String { 

    func stringByAppendingPathComponent(path: String) -> String { 

     let nsSt = self as NSString 

     return nsSt.stringByAppendingPathComponent(path) 
    } 
} 

你也可以使用这种方式:

let imageDirPath = docsPath.stringByAppendingPathComponent("SwiftDataImages") 
let imagePath = imageDirPath.stringByAppendingPathComponent(imageID) 
相关问题