【问题标题】:Xcode swift failed with exit code 254Xcode swift 失败,退出代码 254
【发布时间】:2014-06-11 03:26:27
【问题描述】:

我的代码中出现了这个编译器错误,我不知道为什么:

<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254

错误出现在以下代码段中的某处:

var animalViewToSwap: AnimalView = animalViewMatrix.objectAtRow(0, andColumn: 0) as AnimalView
var currentRow = 0
var currentColumn = 0
var animalToSwapWith = true

var currentLocation = animalViewMatrix.findLocationOfObject(animalView)

currentRow = Int(currentLocation.row) - 1
currentColumn = Int(currentLocation.column) - 1

var rowDisplacement = 0
var columnDisplacement = 0

switch inDirection{
    
    case "left":
        columnDisplacement = withDistance * -1
        if (Int(animalViewMatrix.columns) > currentColumn + columnDisplacement)&&(currentColumn + columnDisplacement >= 0)&&(animalViewMatrix.objectAtRow(CInt(currentRow), andColumn: CInt(currentColumn + columnDisplacement)) is AnimalView)
        {
            animalToSwapWith = true;
        }
        else { animalToSwapWith = false }
    
    default:
        println("error")
        animalToSwapWith = false
        break
}

(我有更多非常相似的案例,为了简单起见,我将它们排除在外 - 错误不在其中)

第一个错误

一行中有一个错误:animalToSwapWith = false如果我将其设置为 true 并将除变量初始化行之外的所有其余部分注释掉,错误就会消失。此外,如果我将所有内容都注释掉,但将 animalToSwapWith 实例化为 false,则会发生错误,即使它在实例化为 true 时不会发生。

第二个错误

行中有第二个错误:if (Int(animalViewMatrix.columns) &gt; currentColumn + columnDisplacement)&amp;&amp;(currentColumn + columnDisplacement &gt;= 0)&amp;&amp;(animalViewMatrix.objectAtRow(CInt(currentRow), andColumn: CInt(currentColumn + columnDisplacement)) is AnimalView) 在这一行中,所有这些方法都已在文件的前面使用上述相同类型的变量调用过,因此对方法的了解并不重要。

结论

出现这两个错误是有原因的,还是因为 swift 和 Xcode-6 仍处于 beta 测试阶段,这是 Xcode 中的一个错误?另请注意,当一次注释掉两个错误时,错误消息是相同的。

【问题讨论】:

  • 请提交错误报告here

标签: ios xcode swift ios8 xcode6


【解决方案1】:

这是一个 Swift 编译器错误,显然测试两个或多个隐式展开的选项会导致编译器在某些/许多情况下崩溃。使用Apple's Bugreporter 提交此问题,将其标记为与 rdar://17212295 重复。

示例

这是一个因相同错误而崩溃的最小示例:

let a: String!
let b: String!

if a && b {
    println("have both")
}

如下在命令行上编译并见证同样的崩溃:

$ xcrun swift -v -g crash.swift

【讨论】:

  • 我也经历过。这是避免崩溃的一个很好的提示。谢谢!
【解决方案2】:

我遇到了同样的错误,我追查到这一点:我正在扩展 NSError,并且在扩展中定义了一个 enum。将 enum 定义从扩展中移出修复了该错误。

extension NSError {
    enum WYBErrorCodes: Int {
        case Fatal = 1000
        case XmlParse = 1100
        case CoreData = 1200
    }

    [...]
}

【讨论】:

  • 感谢您的评论。我有类似的情况,我为 NSScanner 编写了一个扩展,并且在其范围内定义了一个枚举。你的建议奏效了。
【解决方案3】:

当我的班级采用 NSTextViewDelegate 协议时,我遇到了同样的错误。如果我删除该协议,编译就会正常。确实很奇怪。

【讨论】:

    【解决方案4】:

    为了提供其他可能的原因以及如何解决它们;我试图在调度块中设置地图视图的区域。如果我注释掉区域的设置,错误就会消失。

        dispatch_once(&centerMapLocation, {
    //                var theSpan: MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
    //                var theRegion: MKCoordinateRegion = MKCoordinateRegionMake(manager.location.coordinate, theSpan)
    //                self.map.setRegion(theRegion, animated: true)
                    })
            }
    

    【讨论】:

      【解决方案5】:

      当我尝试扩展 NSArray 以使用 foreach 方法时,我遇到了同样的错误:

      extension NSArray {
      
          func foreach(f: (AnyObject -> ())) {
              for elem in self {
                  f(elem)
              }
          }
      }
      

      使用带有函数参数的 func 扩展 NSArray 似乎会导致同样的问题。我通过定义一个将NSArray 作为参数的forEachInArray 函数来解决这个问题:

      func forEachInArray<T>(array: NSArray, f: (AnyObject -> ())) {
          for elem in array {
              f(elem)
          }
      }
      

      【讨论】:

        【解决方案6】:

        在我的例子中,我从 swift 通过桥接调用了一个 Objective-c 函数。签名就像-

            - (SomeReturnType *)getSomething:(SomeOptions *)options
                                  success:(void (^)(NSArray *response))success
                                  failure:(void (^)(NSError *error))failure;
        

        从 swift 中,我按如下方式调用它并获得编译错误为“Xcode swift failed with exit code 254”-

            ObjCClass().getSomething(nil, success: {(response : Array!) in
        
        
                }, failure: {(error: NSError!)  in
        
                })
        

        将其更改为以下对我有用 -

             ObjCClass().getSomething(nil, success: {(response : [AnyObject]!) in
        
        
                }, failure: {(error: NSError!)  in
        
                })
        

        【讨论】:

          【解决方案7】:

          我遇到了这个错误,该错误已在今天在线提供的 Beta 7 中得到解决。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-01-28
            • 2018-09-14
            • 1970-01-01
            • 2012-04-20
            • 1970-01-01
            • 2019-03-11
            • 1970-01-01
            相关资源
            最近更新 更多