无法在Xcode中构建错误" [方法]已明确标记为不可用"

时间:2014-11-05 17:41:13

标签: ios xcode swift

我在项目中没有改变任何内容,突然间我在构建设备时遇到了这些错误:

'componentsWithURL(_:resolvingAgainstBaseURL:)' is unavailable: use object construction 'NSURLComponents(URL:resolvingAgainstBaseURL:)'

'componentsWithURL(_:resolvingAgainstBaseURL:)' has been explicitly marked unavailable here (Foundation.NSURLComponents)

在这一行:

let urlComponents = NSURLComponents.componentsWithURL(url, resolvingAgainstBaseURL: false)

快速帮助说该方法(以及类NSSURLComponents)自“iOS(8.0及更高版本)”以来一直可用。文档说“在iOS 7.0及更高版本中可用”。奇怪。

如果我按照错误中的说明操作并使用构造函数,则在访问urlComponents.schemeurlComponents.URL时会出现编译器错误。并不是说我寄予厚望 - 我的代码没有受到影响,并且已经编好了几周没有问题。

  • 我清理了产品和构建文件夹
  • 我恢复了已知的工作提交
  • 我关闭了项目,重新启动了Xcode,重新启动了操作系统,重新安装了Xcode
  • 尝试同时运行调试和发布
  • 尝试将部署目标更改为8.0
  • 尝试在模拟器和设备上运行

在Xcode中唯一看起来不同的是,在我的项目名称下面写着“ios sdk 8.1”。我记得之前曾经见过8.0,但我从来没有改过它,也没有办法改变它。不知道为什么会有任何不同。

Xcode版本6.1(6A1052d)

1 个答案:

答案 0 :(得分:7)

如错误消息所示,构造函数为NSURLComponents(URL:resolvingAgainstBaseURL:),在您的情况下为

let urlComponents = NSURLComponents(URL: url, resolvingAgainstBaseURL: false);

另请注意,这是一个“可用的初始化程序”(现在)并返回一个可选项。 因此,您必须显式展开结果或使用可选绑定进行测试:

if let urlComponents = NSURLComponents(URL: url, resolvingAgainstBaseURL: false) {
    // Use urlComponents ..
} else {
    // failed
}