【发布时间】:2017-01-23 07:39:26
【问题描述】:
我刚刚将我们的项目迁移到 swift 3 并看到很多由于一个问题而崩溃:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[_SwiftValue pointSize]:无法识别的选择器已发送到实例
该错误的原因是调用:
[NSAttributedString(NSExtendedStringDrawing) boundingRectWithSize:options:context:]
我注意到,如果我将 String 转换为 NSString 并在其上调用 boundingRectWithSize,它会抛出该错误。它似乎也发生在许多其他部分,例如,如果我在情节提要中发送视图控制器标题,它会引发相同的错误。
有人遇到同样的问题吗?
重现问题:
在 Xcode 8 中创建一个新的 Swift 3 项目,并在 viewDidLoad 中添加以下行:
let attributes: [String: AnyObject?] = [
NSFontAttributeName: UIFont.systemFont(ofSize: 14)
]
let boundingRect = ("hello" as NSString).boundingRect(with: CGSize(width: 100, height: 100), options: .usesLineFragmentOrigin, attributes: attributes, context: nil)
但正如我所说,它在许多其他地方都崩溃了,因为 UIKit 似乎在许多部分内部都使用了这种方法
【问题讨论】:
-
请显示您的代码导致相关部分出现问题。
-
貌似和NSString的内部实现有关
-
我遇到了同样的崩溃,但为此:(textLabel.text!as NSString).size(attributes: fontAttributes) 我已经尝试了一切,从使用 nsmutablestring,向它附加字符串等等。仍然崩溃。毫无疑问,这是苹果的错。真的真的很糟糕。无法迁移。
-
类似的崩溃。苹果在做什么! (不,我不是强行解开“做”;))
标签: ios swift string nsstring uifont