在我的 AppController 类中,我已将 NSMutableString 声明为属性。
这是正确的、符合 MVC 的解决方案。模型的主要所有者应该是控制器,而不是视图。所有视图都应该从控制器获取模型。
但是,您不应该公开字符串的可变性。然后,任何使用该属性的东西都可能会尝试直接改变字符串,而 AppController 不知道更改并能够通知该属性的任何观察者。该属性应声明为 NSString 和 readwrite,以便提供一个访问器来用新字符串替换该值。
我想要做的是为字符串设置一个初始值,比如@“First Entry\n”,然后将其绑定到 NSTextView。
设置支持属性的实例变量的值init
.
在IB中绑定NSTextView。然后,当您加载笔尖时,它就已经被绑定了。
注意你要设置ivarbefore加载笔尖。如果您先加载笔尖,文本视图将看不到更改,因为直接设置 ivar (就像您应该在init
,以避免产生属性副作用)是在观察者(视图)背后进行更改。如果在加载笔尖时已经进行了更改(并且视图开始观察),则视图不会错过任何内容。
当我按下按钮时,会出现一个方法 -(IBAction)appendToString ...
Cocoa 中的每一个动作都只需要一个参数——不多也不少。该参数是发送消息的控件。因此,正确的签名是:
- (IBAction) appendToString:(id)sender;
... 被调用,它将 @"Another Line\n" 附加到 NSMutableString。
您需要做的就是向属性询问当前字符串,制作可变副本,进行更改,并将修改后的字符串设置为属性的新值。不要忘记释放那个可变副本。
我希望这些更改通过绑定和键值观察的方式反映在 NSTextView 中,而不是通过声明 IBOutlet 并手动更新内容。我还想在文本视图中进行更改以编辑 NSMutable 字符串。
当您绑定文本视图时,这两种情况都会免费发生value
绑定到您的 AppController 的属性。