【问题标题】:iOS8, Swift: fileURLWithPath - missing argument for parameter erroriOS8,Swift:fileURLWithPath - 参数错误缺少参数
【发布时间】:2014-12-23 19:54:24
【问题描述】:

我正在尝试使用以下方法将子目录附加到文档目录:

class func fileURLWithPath(path: String) -> NSURL?`

代码:

let applicationDocumentsDirectory:String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let storesDirectory:NSURL = NSURL.fileURLWithPath(applicationDocumentsDirectory).URLByAppendingPathComponent("Stores")

遇到错误

调用中的参数“isDirectory”缺少参数。

我不太明白,为什么编译器需要这个参数?界面中没有提到?

提前通知

【问题讨论】:

  • 什么是applicationDocumentsDirectory?如果这来自 Xcode Core Data 模板应用程序,那么它可能是 NSURL 而不是 String,因此将其作为参数传递给 fileURLWithPath() 是没有意义的。
  • 让 applicationDocumentsDirectory:String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
  • 像往常一样,在问题中提供示例数据会有所帮助,请将其添加到问题中。当有单独的语句代替大型复合语句时,它还有助于调试,将几件事组合成一个语句没有任何优势。
  • 你没看到我的 let storesDirectory 吗?
  • @NathFur:错误信息具有误导性。通常,原因是fileURLWithPath() 返回一个可选

标签: ios swift nsurl


【解决方案1】:

问题在于,当链中有选项时,您正在尝试链接方法。

NSURL.fileURLWithPath(applicationDocumentsDirectory) 返回NSURL? 类型。当您尝试对其执行方法URLByAppendingPathComponent 时,它会引发编译器错误。

我知道编译器错误与真正的原因完全无关,这有点糟糕,但这只是当前 Swift 版本的一个优点。

使用! 解包,它会正常工作:

let storesDirectory:NSURL = 
NSURL.fileURLWithPath(applicationDocumentsDirectory)!
     .URLByAppendingPathComponent(NFConstants.NFCoreDataStringIdentifiers.CoreDataStoresPathComponent.rawValue)

当然,强制解开可选项可能会导致崩溃,所以最好使用if let idiom:

if let baseUrl = NSURL.fileURLWithPath(applicationDocumentsDirectory) {
    let storeURL = baseUrl.URLByAppendingPathComponent(NFConstants.NFCoreDataStringIdentifiers.CoreDataStoresPathComponent.rawValue)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2021-03-16
    • 2012-03-04
    相关资源
    最近更新 更多