【发布时间】:2014-08-26 01:22:31
【问题描述】:
以前我可以使用以下代码将属性文本放入 NSTextView 字段
[[self->content textStorage] appendAttributedString:contentString];
但是,在更新到为 Yosemetie 开发的 Xcode 6 Beta 后,以前可以使用的方法现在给我这个错误:
2014-08-26 11:06:06.635 JaxWire[59482:1765389] An uncaught exception was raised
2014-08-26 11:06:06.636 JaxWire[59482:1765389] Modifications to the layout engine must not be performed from a background thread.
还有一个我认为没有多大用处的更广泛的 gloop。
为了提供有关其工作原理的上下文,用户在字段中输入文本,触发类 InterfaceManager 中名为 GO 的方法,然后运行以下代码以在 @ 中生成一个新线程 ProcessQuery 987654326@ 类,这是我尝试使用属性字符串更改 NSTextView 内容的地方
[NSThread detachNewThreadSelector:@selector(processQuery:) toTarget:self withObject:query];
值得注意的是,如果我通过执行[self->content setString:@"String"]; 来使用标准字符串,则此方法有效,但在使用属性字符串时,它不起作用。
我该如何解决这个问题?
提前致谢! :)
【问题讨论】:
-
错误很明显,您正在尝试在后台线程上修改布局引擎。您需要在主线程上执行此操作。
-
@Dima 但是这段代码以前可以在 Xcode 5 上运行。此外,我不知道如何将其推送到主线程...
-
我会在答案中写一些示例代码。
标签: objective-c nsattributedstring nstextview