iOS 16 NSTextContentStorage locationFromLocation:withOffset: 崩溃问题

问题描述

9月13日 iOS 发布了 16 ,应用崩溃在 NSTextContentStorage locationFromLocation:withOffset: 如下图
在这里插入图片描述
实际情况是 UITextField 调用下图 Api 时崩溃
在这里插入图片描述


原因分析:

各种资料各种查 可能是改了默认文本引擎为 TextKit2的原因 。
TextKit 2 是 Apple 在 iOS 15 和 macOS 12 中引入的新文本布局引擎。在 iOS 16 和 macOS 13 中,Apple 自动为 Apple 的应用程序和第三方应用程序选择了 TextKit 2。也就是说现在默认就是 TextKit 2 了,以前默认是 1 。
api不兼容? Apple 得 Bug?

解决方案:

在一个博客中找到了一些资料 (https://lapcatsoftware.com/articles/textview5.html)这个叫Jeff Johnson得哥们,联系了苹果,但是苹果说:
谢谢你的反馈。这看起来是一个你需要解决的问题。
在iOS 16中新增,UITextView的默认文本引擎是TextKit 2。
这段代码使用TextKit 1 API实现自定义文本附件(attachmentBoundsForTextContainer:proposedLineFragment:glyphPosition:characterIndex:),这与TextKit 2不兼容。
这里有几个不同的选项。
为了恢复之前的行为并避免崩溃,您可以显式地设置UITextView使用TextKit 1并继续使用TextKit 1 API。有多种方法可以做到这一点,基于该报告提交的应用程序,最简单的方法是将 Interface Builder 中“ Text Layout ”选项设置为“TextKit 1”(而不是“defaut”)。
另一种选择是使用TextKit 2引擎迁移到基于视图的文本附件。
有关TextKit 1/TextKit 2兼容性和基于视图的文本附件的更多信息,请参考WWDC22视频“TextKit和文本视图中的新内容”和附带的示例代码,可以在这里找到:https://developer.apple.com/videos/play/wwdc2022/10090/

这个博主是 UITextView 出得问题,而我是UITextField并且没有使用Interface Builder。

大致意思就是说 老子不管,你自己想办法。要么继续使用 TextKit 1 ,要是用 TextKit 2重新写。
不知道UITextField怎么设置使用 TextKit 1,完犊子的我只能重写。
一篇关于保持 TextKit 1 得帖子 (https://developer.apple.com/forums/thread/708610)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值