首页 文章

由于信号命令失败:分段故障:11 | Xcode 7.2

提问于
浏览
4

我被要求将一个相当大的应用程序迁移到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 .

1 回答

  • 3

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

    偶尔通常的XCode愚蠢错误协议(干净,XCode重启,清理,构建)修复它 . 但是,通常是由于一行或多行有问题的代码 . 这并不一定意味着代码中也存在错误!

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

    有几件事情似乎经常产生这种错误 . 因此,如果您能够隔离一致导致错误的特定问题,请简要地添加到此列表中:

    1)在调用使用autoclosures的方法时使用plus运算符进行字符串连接(在调用XCGLogger时找到):

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

    2)无法从子类调用super.init(),尤其是当超类使用默认初始化程序时(您尚未显式创建自己的init)

    3)意外地使用单个等号来测试相等性(使用=而不是==),尤其是在复杂语句中,例如this answer.

相关问题