Objective c 将*简单*ASCII字符串附加到NSScrollView

Objective c 将*简单*ASCII字符串附加到NSScrollView,objective-c,appkit,Objective C,Appkit,有没有一种简单的方法可以将字符串附加到NSScrollView的NSTextView?我不想要属性。我只是将错误消息作为NSString输入,我希望将每个错误消息附加到窗口中。没什么特别的。如果我喝了太多的啤酒,并决定放弃最高级的幻想,除了CR、LF和TAB之外,没有其他格式 我在类文档中遵循的每一条路径似乎都会导致一个自我引用的黑洞。。。像NSMutableAttributedString。。。它们不是真正的nsstring,甚至没有cString方法 我一直在考虑只保留我自己的NSStrin

有没有一种简单的方法可以将字符串附加到NSScrollView的NSTextView?我不想要属性。我只是将错误消息作为NSString输入,我希望将每个错误消息附加到窗口中。没什么特别的。如果我喝了太多的啤酒,并决定放弃最高级的幻想,除了CR、LF和TAB之外,没有其他格式

我在类文档中遵循的每一条路径似乎都会导致一个自我引用的黑洞。。。像NSMutableAttributedString。。。它们不是真正的nsstring,甚至没有cString方法


我一直在考虑只保留我自己的NSString,并在以简单的方式添加errorstring之后完全重写scroll视图的内容。但这似乎。。。低效的。。。当报告的数量可能变得相当大时。

每个字符串都需要一些属性才能绘制到屏幕上-字体/大小/颜色至少是必需的

从文档中并不完全清楚,但是操作
NSTextView
的“正确”方法是直接操作
NSTextStorage
。另外,
NSTextStorage
NSMutableAttributedString
的子类

您可以在不处理属性的情况下向字符串中添加字符,它只需将属性从您添加文本的字符串中复制到:

[textView.textStorage replaceCharactersInRange:NSMakeRange(textView.textStorage.length, 0) withString:@"\nhello world"];
您可能还需要向下滚动:

[textView scrollRangeToVisible:NSMakeRange(textView.storage.length, 0)];

性能将很好,甚至可以达到千兆字节的数据。NSTextView非常高效,尤其是当只对内容进行了一些小的更改时。

I get Controller.m:58:26:错误:“struct objc_object”没有名为“storage”的成员[serverStatusMessages->storage replaceCharactersRange:NSMakeRange(serverStatusMessages->storage.length,0)with string:m];^Controller.m:58:93:错误:“struct objc_object”没有名为“storage”的成员[serverStatusMessages->storage replaceCharactersRange:nsMakerRange(serverStatusMessages->storage.length,0),字符串为:m]^其中serverStatusMessages是NSTEXTVIEW的我的出口为什么要使用
->
操作符?请改用
运算符。
->
运算符是一种非常低级的语言特性,在Obj-C编程中几乎从未使用过。它们的功能大致相同,但是
是一个具有附加功能的高级版本,通常是唯一可以可靠使用的版本。首先是这样做的。Controller.m:58:26:错误:请求非结构或联合中的成员“存储”[serverStatusMessages.storage ReplaceCharactersRange:NSMakeRange(serverStatusMessages.storage.length,0)和字符串:m];^Controller.m:58:92:错误:请求非结构或联合中的成员“存储”[serverStatusMessages.storage ReplaceCharactersRange:NSMakeRange(serverStatusMessages.storage.length,0)和字符串:m]^我还搞砸了,在应该是
textStorage
的时候发布了
storage
:-)试试看。