2015-10-03 16 views
9

Tôi vừa tìm thấy 5 báo cáo sự cố bên trong trình tổ chức xcode. Khi tôi mở chúng tôi nhận được stacktrace này (khu vực đánh dấu là tên của ứng dụng của tôi):Swift sở hữu để bảo đảm

enter image description here

Lỗi này xảy ra trên iOS8.4 cũng như trên iOS9, và trên iPhone 5 và iPhone 6 thiết bị tương tự như vậy .

Thật khó để tôi theo dõi vì tôi không thể sao chép nó trên iPhone5 (8.4) hoặc trên iPhone6 ​​(9.0.1).

1./2. đâu đó ở đây:

override func onButtonTableViewCellClick(button: BfPaperButton) {} 

3.

var button: BfPaperButton = BfPaperButton.newAutoLayoutView() 

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

tôi sử dụng nhanh chóng 2, xcode 7 và iOS9. Giúp tôi hiểu lỗi. Dòng đầu tiên với hình ảnh màu đỏ có nghĩa là gì? Tại sao có lỗi này liên quan đến Swift.String?

tôi thấy chủ đề này: https://forums.developer.apple.com/thread/6078 nơi tôi được chiết xuất thông tin này:

Một trường hợp tôi đã nhìn thấy loại này của vụ tai nạn là khi một đối tượng obj-C dựa trên gọi một phương pháp đại biểu đó là Swift- dựa trên và giá trị tham số là nhưng chữ ký phương thức Swift không phải là loại tùy chọn. Trong trường hợp tôi đã thấy, đó là lỗi trong chữ ký của phương thức ủy nhiệm bắc cầu - nó thực sự được cho là tùy chọn. Nó có thể là một cái gì đó tương tự trong trường hợp của bạn (định nghĩa Swift không cho phép một tùy chọn khi cần), hoặc nó có thể là một lỗi trong mã Obj-C (sản xuất nil khi nó không nên).

Tôi sử dụng obj-c lib được gọi là BfPaperButton tạo nút có dạng trong thiết kế material design android. Có thể lỗi liên quan đến thư viện này?

Log:

enter image description here

Xem hình: http://i.stack.imgur.com/5aQ8m.png

Tôi có hai phần mở rộng chuỗi. Một cho chiều dài và một cho chuỗi:

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)) 
    } 
} 

Đường dây 188 là:

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

trong đó sử dụng phần mở rộng chuỗi. Có lẽ lỗi ở đây?

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

Thông báo lỗi thực tế là gì bên trong trình xem nhật ký? –

+0

@ l'L'l Ý bạn là gì? Tôi có chế độ xem tổ chức (xem câu hỏi đã cập nhật của tôi) và khi tôi nhấp vào "Mở trong dự án", tôi có giao diện nhật ký như trong hình đầu tiên. –

+0

Bạn có thể đăng toàn bộ văn bản của 'thread 0, # 1' (xóa thông tin cá nhân là tốt, nó chỉ là phần còn lại của dòng là trucated - có thể bao gồm dòng trong đó lỗi xảy ra). –

Trả lời

8

Theo tôi, bạn đang nhìn nhầm địa điểm.Khi tôi nhìn vào các bản ghi, những gì tôi thấy là:

  1. Một nhấp chuột vào một nút
  2. onButtonTableViewCellClick
  3. obj-C để Swift internals (bạn có thể tìm hiểu thêm trong What's Dead & Exploded in Swift's exception stack?)
  4. Indexing String bởi Int (xem String.subscript.getter (Swift.Int) -> String)

Chúng tôi có thể chắc chắn rằng vụ tai nạn xảy ra ở đâu đó ở đây:

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

Tôi nghĩ chúng ta có thể loại trừ nil vì điều đó sẽ gây ra sự cố trước đó. Nhiều khả năng bạn có chỉ số ký tự ngoài giới hạn vấn đề. Điều đó có nghĩa là i là số âm hoặc cao hơn length - 1 (có thể bạn đang lập chỉ mục một văn bản trống?)

Thật không may, mã quan trọng là ở onButtonTableViewCellClick và bạn chưa đăng.

+0

Cảm ơn! Tôi đã thêm một số mã vào câu hỏi của mình. Nó có giúp được không? –

Các vấn đề liên quan