ios - 阿拉伯字符(有效的电源错误)使我的 swift iOS 应用程序崩溃。如何正确清理输入以避免此问题和相关问题?

标签 ios swift input fonts arabic

导致崩溃的文本如下: enter image description here

错误发生在以下行:

let size = CGSize(width: 250, height: DBL_MAX)
let font = UIFont.systemFontOfSize(16.0)
let attributes = [
  NSFontAttributeName:font , 
  NSParagraphStyleAttributeName: paraStyle
]
var rect = text.boundingRectWithSize(size, options:.UsesLineFragmentOrigin, attributes: attributes, context: nil)

其中文本变量包含输入的字符串 parastyle 声明如下:

let paraStyle = NSMutableParagraphStyle()
paraStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping

我最初的想法是系统字体无法处理这些字符,我需要做一个 NSCharacterSet,但我不确定如何禁止那些会导致我的应用程序崩溃的字符或者让它让我可以处理这个输入(理想)。我也不想禁止表情符号/表情符号。

谢谢!

最佳答案

不是答案,而是一些信息,这可能提供了一种避免它的编码方式。

更新信息来自 The Register :

问题不在于阿拉伯字符本身,而在于 CoreText 如何处理表示它们的 unicode,CoreText 是一个软件例程库,可帮助应用程序在屏幕上显示文本。

该错误导致 CoreText 访问无效的内存,这会迫使操作系统终止当前正在运行的程序:这可能是您的短信应用程序、您的终端,或者在通知屏幕的情况下,核心部分操作系统。

来自 Reddit,但这可能不完全正确:

它仅在消息必须使用“...”缩写时才有效。这通常位于 Messages.app 的锁定屏幕和主菜单上。

effective 和 power 这两个词可以是任何东西,只要它们位于不同的两行,这会迫使阿拉伯语文本在消息的下方,其中一些字母将被替换为“...”

当第一个点替换了其中一个阿拉伯字符的一部分时会发生崩溃(它们需要多个字节来存储)通常会有安全检查以确保不存储半个字符,但是这种替换绕过了这些检查不管什么原因。

关于ios - 阿拉伯字符(有效的电源错误)使我的 swift iOS 应用程序崩溃。如何正确清理输入以避免此问题和相关问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580195/

相关文章:

java - 如何使用java中的扫描器读取字符串之前的空格?

css - 使 Bootstrap 3.0 输入组内联显示

ios - 我需要运行 XCode 4.3 项目两次才能启动 cocos2d 应用程序

iOS:CLLocationManager 的 maximumRegionMonitoringDistance 度量单位

objective-c - 随机选择 "list"中 x 数量的项目

python - 如何在 Python 3.x 中强制输入整数?

android - 如何删除 Flutter 项目中的 ios 文件夹?

swift 3(SpriteKit): Change the properties of each line in CGPath

ios - 当应用程序从后台返回时显示 View Controller (iOS 13)

ios - Swift 可解码 : how to transform one of values during decoding?