【发布时间】:2010-09-05 04:30:52
【问题描述】:
好的,所以我正在尝试在 Xcode 中为自己设置一个非常简单的程序。
我有一个窗口(在界面生成器中),其中包含一个 NSTextView 和一个 NSButton。在我的 AppController 类中,我已将 NSMutableString 声明为属性。我想做的是为字符串设置一个初始值,比如@“First Entry\n”,然后将它绑定到NSTextView。当我按下按钮时,会调用一个方法 -(IBAction)appendToString,它将 @"Another Line\n" 附加到 NSMutableString。
我希望这些更改通过绑定和键值观察反映在NSTextView 中,而不是通过声明IBOutlet 并手动更新内容。我还想在 textview 中进行更改以编辑 NSMutable 字符串。
不幸的是,我非常困惑,并且没有运气弄清楚这一点。
有哪些基本步骤可以解决这个问题?
*****编辑*****
好的,Peter Hosey 间接解决了这个问题。我忘记了我必须使用 setLogString 方法,而不是使用 [logString appendFormat:]。所以这是我最终得到的代码:
在 AppController.h 中:
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject {
IBOutlet NSButton *appendButton;
NSString *logString;
IBOutlet NSTextView *thatView;
}
@property (readwrite, copy) NSString *logString;
-(IBAction)hitIt:(id)sender;
@end
AppController.m:
#import "AppController.h"
@implementation AppController
-(void)awakeFromNib
{
}
-(id)init
{
[super init];
logString = @"First Line\n";
return self;
}
-(IBAction)hitIt:(id)sender
{
[self setLogString:[logString stringByAppendingString:@"Hey, Another Line!\n"]];
}
@synthesize logString;
@end
然后,在 InterfaceBuilder 中,我将 NSTextView 绑定到 AppController.logString,并设置“持续更新值”标志,以便我对文本字段所做的更改将应用于字符串。
非常感谢各位的帮助!
【问题讨论】:
-
你不需要在那里使用
alloc和initWithFormat:。当您有要传递的格式字符串时,您应该只使用initWithFormat:(和stringByAppendingFormat:);这些字符串都不包含任何格式化序列,所以你应该在第一种情况下分配裸字符串文字(它是一个 NSString,因为它是一个文字,所以不保留它是可以的),并使用stringByAppending*String:* 在第二种情况下。 -
哎呀,感谢您接住彼得。我在其中使用的实际程序确实使用了 stringByAppendingFormat,我不小心把它带到了我的测试程序中。现在修好了。 :)