在文本字段中输入文本时出错,例如:_NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 7

Sac*_*ram 5 iphone objective-c ios ios7

在 uitextfiled 中输入文本时应用程序崩溃并出现如下错误:_NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 7. 任何帮助将不胜感激..

cti*_*tze 1

__NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index据我所知,这些东西确实不会导致崩溃。

但崩溃和无效字形似乎都有根本原因。NSTextStorage当您在布局正在进行时对文本存储执行更改时,这些类型的错误会在自定义子类等地方弹出-processEditing,反之亦然。

如何查找一般的错误以及具体在 TextKit 组件中的错误

由于OP没有提供更多细节,这里有一个建议列表来查找而不是解决问题。每执行完一步后,尝试运行程序并查找崩溃情况:

  1. 从组件中删除任何与 TextKit 相关的自定义子类和委托 (!),包括UITextField子类本身,并改用系统默认组件。这不应该再崩溃了。
  2. 如果有的话,尝试将代表放回原位。我在想NSTextStorageDelegate和朋友们。
  3. 如果没有崩溃,请再次停用代表。(如果是的话,你现在就知道是谁的错了:))

现在讨论组件子类;按照布局过程中的责任链派生的顺序将子类一一重新投入运行:

  1. 添加回自定义NSGlyphGenerator子类(如果有)。他们处于指挥链的下游。如果没有任何反应,暂时再次使用系统默认值。
  2. 对子类执行相同的操作NSTypesetter,将其放入,然后再次将其关闭。
  3. 对于NSLayoutManager子类(如果有的话)也是如此。这些东西仍然在命令链的更下游。
  4. 添加回自定义NSTextStorage子类。文本存储位于命令链的高层,可能有多个可能中断的位置。

然后尝试组合,再次从底部开始,并根据需要尝试尽可能多的组合,直到应用程序崩溃。

一旦找到导致崩溃的确切调用,请提出一个新问题:)