gpt4 book ai didi

ios - 为什么调用 NSMutableAttributedString addAttributes 会崩溃?

转载 作者:搜寻专家 更新时间:2023-10-31 08:03:45 25 4
gpt4 key购买 nike

我在无法重现的字段中调用 addAttributes 时经常崩溃 (EXC_BREAKPOINT)。对我传入的 NSRange 添加了检查,令人惊讶的是它仍然崩溃......非常感谢收到任何想法!

let boldAttributes : [NSAttributedStringKey: Any] = [.font: cellStyle.boldFont()]
if (nsrange.location >= 0 && nsrange.length > 0 && nsrange.location + nsrange.length <= myAttributedString.length) {
myAttributedString.addAttributes(boldAttributes, range: nsrange)
}

按要求添加的崩溃日志:

#0. Crashed: com.apple.main-thread
0 MyApp 0x10054ae38 specialized UIAccessorizedTextField.accessoryAttributedString(IndexPath, cellStyle : UIAccessorizedTextFieldCellStyle) -> NSAttributedString (UIAccessorizedTextField.swift:322)
1 MyApp 0x10054b104 specialized UIAccessorizedTextField.collectionView(UICollectionView, cellForItemAt : IndexPath) -> UICollectionViewCell (UIAccessorizedTextField.swift:345)
2 MyApp 0x10054860c @objc UIAccessorizedTextField.collectionView(UICollectionView, cellForItemAt : IndexPath) -> UICollectionViewCell (UIAccessorizedTextField.swift)
3 UIKit 0x18b229f3c -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + 356
4 UIKit 0x18bb90b68 -[UICollectionView _prefetchItemsForVelocity:maxItemsToPrefetch:invalidateCandidatesOnDirectionChanges:] + 508
5 UIKit 0x18b2088b4 -[UICollectionView layoutSubviews] + 760
6 UIKit 0x18b0d76f4 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1420
7 QuartzCore 0x18564dfec -[CALayer layoutSublayers] + 184
8 QuartzCore 0x18565217c CA::Layer::layout_if_needed(CA::Transaction*) + 324
9 QuartzCore 0x1855be830 CA::Context::commit_transaction(CA::Transaction*) + 320
10 QuartzCore 0x1855e6364 CA::Transaction::commit() + 580
11 QuartzCore 0x1855e71e4 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 92
12 CoreFoundation 0x18146e910 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
13 CoreFoundation 0x18146c238 __CFRunLoopDoObservers + 412
14 CoreFoundation 0x18146c884 __CFRunLoopRun + 1436
15 CoreFoundation 0x18138cda8 CFRunLoopRunSpecific + 552
16 GraphicsServices 0x183371020 GSEventRunModal + 100
17 UIKit 0x18b3a9758 UIApplicationMain + 236
18 MyApp 0x1003f2830 main (main.m:16)
19 libdyld.dylib 0x180e1dfc0 start + 4

最佳答案

由于崩溃不容易重现,它应该取决于 myAttributedStringnsrange 的内容:周围的代码提供了通过检查的值,但仍然崩溃.我知道有两种方法可以实现这一目标。

第一种方法是传递一个 NSRange,其位置为 NSNotFoundlength > 0。示例:

let myAttributedString = NSMutableAttributedString(string: "Hello")
let nsrange = NSRange(location: NSNotFound, length: 1)

第二个是旧 iOS 版本在向表情符号的子集添加属性时发生崩溃。如果你只在旧的 iOS 版本中看到崩溃,那应该是这样的场景:

let myAttributedString = NSMutableAttributedString(string: "👨‍👩‍👧 is a family")
let nsrange = NSRange(location: 1, length: 2)

因此,如果您看到所有 iOS 版本的崩溃,您可以先检查 nsrange != NSNotFound 来修复崩溃。如果您只看到旧 iOS 版本的崩溃,请检查周围的代码以查找可能计算错误范围的地方。当将来自 Swift 的字符串信息与来自 Objective-C 的 Foundation 的字符串信息混合时,通常会发生这种情况。例如,"👨‍👩‍👧".count 为 1,而 ("👨‍👩‍👧"as NSString).length 为 8。

关于ios - 为什么调用 NSMutableAttributedString addAttributes 会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51082202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com