无法生成newParagraphStyle崩溃

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本身的一个错误.

Fra*_*kie 1

我刚才遇到了这个问题,并且能够通过将typingAttributes有问题的设置textFieldnil直接在resignFirstResponder由相同的调用之前来解决它textField