Cocoa 在NSTextView中将选定文本设置为粗体

Cocoa 在NSTextView中将选定文本设置为粗体,cocoa,nstextview,foundation,Cocoa,Nstextview,Foundation,我正在使用以下代码在NSTextView中将所选文本设置为粗体 [self.textView.attributedString addAttribute:NSFontAttributeName value:[NSFont boldSystemFontOfSize:12] range:self.textView.selectedRange]; 其中self.textView是NSTextView的出口。Xcode发出警告,addAttribute可能无法工作,因为该属性的类型为NSAttri

我正在使用以下代码在NSTextView中将所选文本设置为粗体

  [self.textView.attributedString addAttribute:NSFontAttributeName value:[NSFont boldSystemFontOfSize:12] range:self.textView.selectedRange];
其中self.textView是NSTextView的出口。Xcode发出警告,addAttribute可能无法工作,因为该属性的类型为NSAttributedString,而不是NSMutableAttributedString。代码可以工作,但这样做是错误的吗?如果是,正确的方法是什么

更新:
我找到了另一种方法:

NSMutableAttributedString *textFieldText = [self.textView.attributedString mutableCopy];
[textFieldText addAttribute:NSFontAttributeName value:[NSFont boldSystemFontOfSize:12] range:self.textView.selectedRange];
[self.textView.textStorage setAttributedString:textFieldText];
由于这两种方法都有效,我想知道哪一种更好。

概述 以类在其word中公开的接口为例。假设返回类型是声明的返回类型的特定子类不是最佳实践

这在类集群的上下文中尤其重要:公共接口的不同实现对于同一方法可能具有不同的返回类型,尽管这些返回类型保证与头中声明的类型兼容

假设可以保证类集群中所有未记录的子类当前都返回头中声明类型的同一特定子类,那么就不能保证在Apple框架的未来版本中仍然如此

NSTextView 问题是关于
NSTextView
及其属性
textStorage
。此属性的类型为
NSTextStorage
,是“NSMutableAttributeString的半具体子类”。接着,描述了更改由
NSTextStorage
存储的字符串或其属性的首选机制:

使用NSMutableAttributedString、NSAttributedString、NSMutableString和NSString定义的文本访问方法执行字符级操作

NSTextView
公开其属性
textStorage
,该属性是
NSTextStorage
的一个实例
NSTextStorage
NSMutableAttributedString
的子类。因此,我们可以简单地为其添加属性:

[self.textView.textStorage addAttribute:NSFontAttributeName
                                  value:[NSFont boldSystemFontOfSize:12.0f]
                                  range:self.textView.selectedRange];

我认为你的更新是正确的选择。我认为你的解决方案是唯一正确的选择。别忘了释放/自动释放复制的对象,复制并增加保留计数器。(如果你不使用ARC)这里没有人知道我在哪里可以找到这些问题的权威答案。。我试着在developer.apple.com上四处看看……如果你能提供“正确”的代码,我会接受你的答案。我想我还没有足够努力去深入研究文档。。。但这是一片丛林,的确如此。不过,该方法是文档中推荐的方法。