如何解决Swift Crashlytics EXC_BREAKPOINT 错误含义
我在 Firebase Crashlytics 中看到此报告:
但是我不明白这是什么意思?我实际上有 5 个不同的开放错误,但它们看起来都像示例!总是有 17 个愿望清单 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,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
。我在点击链接时验证它。
解决方法
崩溃发生在 iOS 隐藏代码中,就在调用 UITextViewDelegate
方法 textView(_:shouldInteractWith:in:interaction:)
之前。
这与 this one 的问题相同。要重现您的错误,您可以为您的链接添加韩文文本(한국어 텍스트
,即谷歌翻译中的“韩文文本”)、阿拉伯文本(نص عربي
,即谷歌翻译中的“阿拉伯文本”)等。您可以在 Internet 上搜索示例“奇怪”文本(即,不是“az 字符”)。
发生了什么:
-
设置:
attributedText.addAttribute(.link,value: INVALIDSTRINGVALUE,range: linkRange) aTextView.attributedText = someAttributedText
-
用户点击链接
-
稍后将调用 textView(_:shouldInteractWith:in:interaction:) 的 Apple 内部代码
-
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
如果用户尝试点击链接,它应该避免崩溃(以验证)。
向用户显示值时(编辑时),如果为 hasBeenFixed == true
,则显示移除百分比转义的值。然后,当用户尝试验证时,它会弹出警报,并且需要修复它。保存有效 URL 时,将 hasBeenFixed
更改为 false
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。