我有一个非常简单的问题,希望有人能在我开始理解绑定(bind)时回答。我想以编程方式更改我的 NSString 值,并通过绑定(bind)将 NSTextField 更新为该值。我有一个 NSTextField 和 NSLabel。为了表示正确更改的 myString 的值,我有一个 NSButton。
- 我已将 NSTextField 的值绑定(bind)到 App Delegate 的 myString 属性,并选中了“持续更新值”。
- 我将 NSLabel 的值绑定(bind)到 App Delegate 的 myString 属性。
- 我将 NSButton socket 连接到 setDefault 方法。
当我在 NSTextField 中键入时,NSLabel 会按预期更新,但是当我单击按钮时,myString 属性会更新,但不会在 NSTextField 中更新。
我需要做什么才能让 NSTextField 更新到 myString 属性????
AppDelegate.h
@interface AppDelegate : NSObject<NSApplicationDelegate>
{
NSString *myString;
}
@property (assign) IBOutlet NSWindow *window;
@property NSString *myString;
- (IBAction)setDefault:(id)sender;
@end
AppDelegate.m
@implementation AppDelegate
@synthesize window = _window;
@synthesize myString;
- (void)applicationDidFinishLaunching:(NSNotification*)aNotification
{
myString = @"This is a string";
}
- (IBAction)setDefault:(id)sender
{
NSLog(@"%@", myString);
myString = @"This is a string";
NSLog(@"%@", myString);
}
@end
最佳答案
不应该
myString = @"This is a string";
但是这个:
self.myString = @"This is a string";
在 -applicationDidFinishLaunching:
和 -setDefault:
中。不要忘记在 NSLog 语句中也指定 self 。您可能希望在 -setDefault:
中指定一个不同的字符串,以便您可以实际看到正在发生的更改。
另一件事:您实际上是在说要分配给 myString,但这不适合对象。而不是:
@property NSString *myString;
你应该改用
@property (copy) NSString *myString;
或至少
@property (retain) NSString *myString;
前者是首选,因为传递一个 NSMutableString
实例有效地将它复制为一个 NSString
,而传递一个 NSString
实例只是保留它。
祝你工作顺利。
关于objective-c - 将 NSTextField 绑定(bind)到 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13630824/