2015-10-03 12 views
9

我剛在xcode組織者中發現了5個崩潰報告。當我打開他們,我得到這個堆棧跟蹤(標面積爲我的應用程序的名稱):Swift擁有保證

enter image description here

在iOS8.4,以及對iOS9,並在iPhone 5和iPhone 6的設備也出現此錯誤。

我很難跟蹤,因爲我無法在iPhone5(8.4)和iPhone6(9.0.1)上重現它。

1./2。這裏的地方:

override func onButtonTableViewCellClick(button: BfPaperButton) {} 

3.

var button: BfPaperButton = BfPaperButton.newAutoLayoutView() 

func onClick() { 
    delegate?.onButtonTableViewCellClick(button) // 3 
} 

我使用SWIFT 2時,Xcode 7和iOS9。幫助我理解錯誤。紅色圖像的第一行是什麼意思?爲什麼這個錯誤與Swift.String有關?

我發現這個線程:https://forums.developer.apple.com/thread/6078這裏我摘錄了這樣的信息:

當一個基於對象 - 對象 調用我已經看到了這種崩潰的

一種情況是一個委託方法是Swift-並且參數值爲 nil,但Swift方法簽名不是可選類型。在我看到的 案例中,這是橋接代理方法簽名中的錯誤 - 它實際上應該是可選的。它可能是 類似於你的情況(Swift定義不允許在應該的時候選擇 ),或者它可能是Obj-C代碼 中的一個錯誤(當它不應該產生時爲零)。

我使用了一個名爲BfPaperButton的obj-c庫,它創建了一個看起來像在android材質設計中的Button。也許這個錯誤與這個庫有關?

登錄:

enter image description here

查看圖片:http://i.stack.imgur.com/5aQ8m.png

我有兩個字符串擴展。一個用於長度,一個用於子:

extension String { 

    var length: Int { return self.characters.count } 

    subscript (i: Int) -> String { 
     return String(Array(self.characters)[i]) 
    } 

    subscript (r: Range<Int>) -> String { 
     let start = startIndex.advancedBy(r.startIndex) 
     let end = startIndex.advancedBy(r.endIndex) 
     return substringWithRange(Range(start: start, end: end)) 
    } 
} 

188行是:

NSUUID().UUIDString[0...4] 

它使用子擴展。也許錯誤在這裏?

override func onButtonTableViewCellClick(button: UIButton) { 

     if let title = button.titleLabel?.text { 

      if title == "Send code" { 

       tmpPhoneNumber = "" 

       var tmp = phoneNumber 

       if tmp.length > 1 { 
        if tmp[0] == "0" { 
         tmp = tmp[1...tmp.characters.count - 1] 
        } 

        tmpPhoneNumber = "0049" + tmp 
        phoneNumberWithCode = tmpPhoneNumber 
        sendAlert(tmp) 
       } else { 
        PfToast.showError("Please enter your phone number.") 
       } 

      } else if title == "Finish" { 
       if let cell: InputTableViewCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 2)) as? InputTableViewCell { 
        if isLicenceValid(cell.inputField.inputField.text!) { 
         createCustomer(cell.inputField.inputField.text!) 
        } else { 
         PfToast.showError("Please enter correct licence plate.") 
        } 
       } 
      } 
     } 
    } 
+0

雖然在日誌查看器中出現實際的錯誤信息,但它是什麼? –

+0

@ l'L'l你是什麼意思?我有組織者視圖(請參閱我的更新問題),當我點擊「在項目中打開」時,我會看到如第一張圖片中所示的日誌視圖。 –

+0

你可以發佈'線程0,#1'的全部文本嗎?(消隱私人信息很好,只是線路的其餘部分是trucated的 - 可能包括髮生錯誤的線路)。 –

回答

8

在我看來,你正在尋找錯誤的地方。當我在看日誌,我看到的是:

  1. 上點擊一個按鈕
  2. onButtonTableViewCellClick
  3. 對象 - 斯威夫特內部(你可以學到更多的What's Dead & Exploded in Swift's exception stack?
  4. 索引String通過Int(見String.subscript.getter (Swift.Int) -> String

我們可以肯定的是,事故發生在這裏的某個地方:

return String(Array(self.characters)[i]) 

我想我們可以排除nil,因爲那會導致更早的崩潰。最有可能你有一個字符索引超出問題。這意味着i或者爲負,或大於length - 1更高(也許你索引一個空的文本?)

不幸的是,重要的代碼是在onButtonTableViewCellClick和你沒有張貼。

+0

謝謝!我在我的問題中添加了一些代碼。它有幫助嗎? –