Swift Crashlytics EXC_BREAKPOINT 错误含义

Swift Crashlytics EXC_BREAKPOINT error meaning

我在 Firebase Crashlytics 中看到此报告:

但是我不明白这是什么意思?我实际上有 5 个不同的未解决的错误,但它们看起来都像示例!总是有 17 Wishlists DropDownForWebView 并且总是 EXC_BREAKPOINT .

另一个例子:

谁能解释一下这是什么意思?知道我该如何解决吗?很烦人...

该应用目前已上线:

https://apps.apple.com/us/app/wishlists-dein-wunschzettel/id1503912334

我很高兴得到每一个帮助!

更新:

我的DropDownView:

//MARK: DropDownView
class DropDownViewForWebView: UIView, UITableViewDelegate, UITableViewDataSource  {

var dropOptions = [DropDownOption]()

var tableView = UITableView() // LINE 18

var delegate : DropDownProtocol!

var selectedWishlistDelegate: SelectedWishlistProtocol?

override init(frame: CGRect) {
    super.init(frame: frame)

我有一个 textView 可以处理 URLs。这是我添加 hyperlink:

的辅助函数
func hyperLink(originalText: String, hyperLink: String, urlString: String) {

    let style = NSMutableParagraphStyle()
    style.alignment = .left

    let attributedOriginalText = NSMutableAttributedString(string: originalText)
    let linkRange = attributedOriginalText.mutableString.range(of: hyperLink)
    let fullRange = NSMakeRange(0, attributedOriginalText.length)
    attributedOriginalText.addAttribute(NSAttributedString.Key.link, value: urlString, range: linkRange)
    attributedOriginalText.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: fullRange)
    attributedOriginalText.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.darkCustom, range: fullRange)
    attributedOriginalText.addAttribute(NSAttributedString.Key.underlineColor, value: UIColor.darkCustom, range: fullRange)
    attributedOriginalText.addAttribute(NSAttributedString.Key.font, value: UIFont(name: "AvenirNext-Medium", size: 15)!, range: fullRange)

    self.linkTextAttributes = [
        kCTForegroundColorAttributeName: UIColor.darkCustom,
        kCTUnderlineStyleAttributeName: NSUnderlineStyle.single.rawValue,
        ] as [NSAttributedString.Key : Any]

    self.attributedText = attributedOriginalText
}

我怎么称呼它:

cell.linkTextView.hyperLink(originalText: "Open link".localized(), hyperLink: "Open link".localized(), urlString: currentWish.link)

currentWish.link 可以是任何东西。不必是有效的 URL。我在点击 link.

时验证了它

崩溃发生在 iOS 隐藏代码中,就在调用 UITextViewDelegate 方法之前 textView(_:shouldInteractWith:in:interaction:)

这与 的问题相同。要重现您的错误,您可以输入 links 韩文文本(한국어 텍스트,即根据 Google 翻译的“韩文文本”),阿拉伯文本(نص عربي,即根据 Google 翻译的“阿拉伯语文本”等。您可以在 Internet 上搜索示例“奇怪”文本(即,不是“a-z 字符”)。

发生了什么:

  • 设置:

    attributedText.addAttribute(.link, value: INVALIDSTRINGVALUE, range: linkRange)
    aTextView.attributedText = someAttributedText
    
  • 用户点击 link

  • 稍后调用textView(_:shouldInteractWith:in:interaction:)的苹果内部代码

  • textView(_:shouldInteractWith:in:interaction:)

  • linkTappedCallbackClosure(url: URL)

  • openURL(_ urlString: String) 你在哪里:

    guard let url = URL(string: urlString) else {
        showInvalidUrlAlert()
        return
    }
    

因此您检查 URL 是否有效,但为时已晚。 iOS 代码内的代码崩溃。

所以在用 hyperLink(originalText:hyperLink:urlString:) 设置 url 之前检查它是否有效 URL(即 URL(string: urlString) != nil),如果不是,调用 showInvaludURLAlert() .

好的,但这只会修复新条目,而不是会导致崩溃的当前值。

要修复较旧的条目,您可以决定删除数据库中所有无效的 URL。但它可能会删除用户认为是标签或其他额外字段的信息。

一个额外的代码,可能是:
遍历你的数据库。
将布尔字段“hasBeenFixed”添加到您的数据库。 对于每个无效的URL(意思是URL(string: thatValue) == nil)),百分比转义它。,将值hasBeenFixed 更改为true
如果用户尝试点击 link.
,它应该避免崩溃(以验证) 向用户显示值时(编辑时),如果 hasBeenFixed == true,则显示已移除百分比转义的值。然后,当用户尝试验证时会弹出警报,并且需要修复它。当保存有效的 URL 时,将 hasBeenFixed 更改为 false