Ste*_*ley 5 iphone nsattributedstring ios
我的报告中出现了各种崩溃,报告了以下原因:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'failed to generate newParagraphStyle'
Run Code Online (Sandbox Code Playgroud)
发生这种情况的应用确实以编程方式设置了很多属性文本(字体,颜色,有时是段落样式),但我找不到与此直接相关的任何模式.我所看到的几乎所有的报告都包含了堆栈跟踪中某种形式的setLineBreakMode的引用:
-[_UICascadingTextStorage(Accessors) setLineBreakMode:]
Run Code Online (Sandbox Code Playgroud)
我自己从来没有能够重新创建它,但它确实在我的崩溃报告中定期出现.我没有专门在这些地方设置换行模式.有任何想法吗?
编辑:我花了更多的时间研究这个,并找到了一个模式来重现.所以我有一个UITextField,当你点击键盘上的返回时,检测到"/ n"字符,文本字段将重新启动其第一个响应者状态.如果在此之后的任何时候,您尝试修改该字段的文本(或属性文本),它会崩溃.有一个关键元素,只有在设置了typingAttributes时才会发生.他们的目标并不重要.
我尝试了一切,在设置文本之前将typingAttributes设置为nil,设置一个固定的字符串以确保它不是我们设置的 - 没有运气.总是崩溃.一旦你进入这种状态,文本字段就会被打破.避免它的黑客就是吹走文本域并创建一个新文本 - 但就是这样.一个黑客.
一些更有趣的信息,代码检测返回键的方式写得不好 - 它检测到"/ n"并返回NO:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
Run Code Online (Sandbox Code Playgroud)
它没有使用适当的方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
Run Code Online (Sandbox Code Playgroud)
在应用程序的一个地方,这实际上修复了崩溃,在其他地方,它总是使用正确的方法,崩溃仍在发生.唯一的解决方法是吹走文本域并创建一个新文本域.对我来说,这似乎是iOS本身的一个错误.
我刚才遇到了这个问题,并且能够通过将typingAttributes有问题的设置textField为nil直接在resignFirstResponder由相同的调用之前来解决它textField。
| 归档时间: |
|
| 查看次数: |
1463 次 |
| 最近记录: |