命令失败,原因是信号:分段故障:11|Xcode 7.2



我被要求将一个相当大的应用程序迁移到Swift 2。编译器不断抛出分段错误:一个函数有11个错误,存在于应用程序逻辑的不同模块中(唯一的区别是使用了变量):

func loadMoreContent() {
if let collection = self.ratingsCollection where collection.identifier != 0,
  let totalEntries = collection.totalEntries,
  let objects = self.ratings?.count where objects < totalEntries {
    self.ratingsCollection = nil
    collection.nextPage().onSuccess { (value) in
      if let collection = value as? Collection<Rating> {
        self.ratingsCollection = collection
      } else {
        self.ratingsCollection = Collection<Rating>(identifier: 0)
      }
      }.onFailure { error in
        self.ratingsCollection = Collection<Rating>(identifier: 0)
    }
  }
}

以下是错误本身:

1.  While type-checking 'loadMoreContent' at (path redacted).swift:46:3
2.  While type-checking expression at [(path redacted).swift:54:9 - line:64:9] 
    RangeText="collection.nextPage().onSuccess { (value) in
              if let collection = value as? Collection<Rating> {
                self.ratingsCollection = collection
              } else {
                self.ratingsCollection = Collection<Rating>(identifier: 0)
              }
              }.onFailure { error in
                self.ratingsCollection = Collection<Rating>(identifier: 0)
            }"
3.  While loading members for declaration 0x7fdda42ea2b0 at <invalid loc>
4.  While deserializing 'producer' (FuncDecl #340) 

有人知道乍一看这个功能会出什么问题吗?我应该在Xcode 6/Swift 1.2中添加它编译时没有任何更改。

这是一个在XCode7中特别常见的拔毛错误。

偶尔,通常的XCode愚蠢的错误协议(clean,XCode Restart,clean,build)会修复它。然而,通常是由于一行或多行有问题的代码造成的。这也不一定意味着代码中有bug!

因此,在重新启动之前,有时按顺序撤消最近的更改并尝试边进行边构建是很有用的。如果自上次成功构建以来,您的任何依赖项或框架都已更新,那么这些可能是候选项。

有几件事似乎经常会产生这种错误。因此,如果你能隔离出持续给你带来错误的特定问题,请简要地添加到这个列表中:

1) 在对使用自动闭包的方法的调用中使用加号运算符的字符串串联(在对XCGLogger的调用中找到):

 public func myFunc(@autoclosure closure: () -> String?){
      // do something
 }
 someInstance.myFunc("Hi " + nameStr + "!")

2) 从子类调用super.init()失败,尤其是当超级类使用默认初始值设定项时(您还没有显式创建自己的init)

3) 偶然使用一个等号来测试相等性(使用=而不是==),尤其是在像这个答案这样的复杂语句中。

最新更新