【问题标题】:Xcode 7 - Strange cast error that refers to XCUIElementXcode 7 - 引用 XCUIElement 的奇怪转换错误
【发布时间】:2015-09-22 11:01:40
【问题描述】:

我已将我的代码更新为 XCode 7 和 Swift 2.0,现在我的一些测试失败了,我在测试版本中看到了 40 个与它们引用的代码完全无关的警告列表。 警告信息是:

"Cast From 'XCUIElement' to unrelated type 'String' always fails" 

这是产生警告的行示例:

if let protocolStr = JSON["version"] as? String{

我还没有使用 XC 用户界面测试...所以我不明白为什么这段代码引用了那个类。任何的想法?

更新:11 月 9 日 对于 XCode 7.1,问题仍然存在。

【问题讨论】:

  • 我有这个确切的问题,看看我能找到什么。
  • 为了“修复”它,我将 AnyObject 类型替换为 [String:AnyObject]。

标签: swift swift2 xcode7


【解决方案1】:

使用 Xcode 7.1.1 未修复,但此解决方法帮助了我:

if let protocolStr = JSON["version"] as AnyObject as! String {

【讨论】:

  • 我们遇到了同样的问题(Xcode 7.2),您的解决方法实际上对我们也有效!但我无法解释为什么。您以这种方式投射的原因是什么?
  • 我怀疑它与 UI 测试模块有关,因为这只是在编写单元测试时才会出现问题。我的猜测是AnyObject 上有一个扩展以添加返回 XCUIElement 的下标,以方便编写 UI 测试。像developer.apple.com/reference/xctest/xcuielementquery/… 这样泄漏到 AnyObject ...
【解决方案2】:

我认为您已经解决了您的问题,但如果其他人正在查看此问题:

问题是 JSON 是我猜的 AnyObject 类型,因为它不知道您可以将其索引为字典。如果您事先将其转换为 [String : AnyObject] ,则不会给您错误。 (就像你注意到的那样)

编辑:至于为什么它特别给你这个错误,我不确定。可能是一个错误。

【讨论】:

  • 这个转换不仅适用于测试目标。应用程序目标接受这个转换没有任何问题。
  • 不,它没有用。问题仍然存在,我们不必寻找解决方法,Apple 必须修复此错误。
  • 嗯,也许这对我来说是情境性的。和 MatterGoal 我同意你的观点,但苹果通常不会放弃你认为他们必须做的事情。一年多来我一直在报告错误,他们甚至没有承认。
【解决方案3】:

我所要做的就是将密钥字符串(“版本”)键入NSString,如下所示:

if let protocolStr = JSON["version" as NSString] as? String {
    …
}

【讨论】:

  • 你不能再像这样转换成NSString了
【解决方案4】:

Xcode 7.2、Swift 2.2

这样试试

if let protocolStr = JSON.valueForKey("version") as? String{
     //your code
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2012-06-20
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多