将NSTextField绑定到NSString
我有一个非常简单的问题,我希望有人能够在我开始理解绑定时回答。 我想以编程方式更改我的NSString值,并通过绑定将NSTextField更新为该值。 我有一个NSTextField和NSLabel。 为了表示正确改变myString的值,我有一个NSButton。
当我输入NSTextField时,NSLabel会按预期更新,但是当我单击按钮时,myString属性会更新,但不会在NSTextField中更新。
我需要做什么才能获得myString属性的NSTextField更新?
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:
和in -setDefault:
。 不要忘记在你的NSLog语句中指定self。 您可能想在-setDefault:
指定一个不同的字符串-setDefault:
以便您可以真正看到正在发生更改。
另一件事:你有效地说你想分配给myString,但这不适合于一个对象。 代替:
@property NSString *myString;
你应该改用
@property (copy) NSString *myString;
或者至少
@property (retain) NSString *myString;
前者是首选,因为传递一个NSMutableString
实例将其有效地复制为NSString
,而传递一个NSString
实例只会保留它。
祝你好运。
我建议你加前缀你的成员变量。 这样您就可以直接区分设置成员或使用setter 。 在你的例子中,我会做以下事情。
@interface AppDelegate : NSObject<NSApplicationDelegate>
{
NSString *m_myString;
}
@property (assign) IBOutlet NSWindow *window;
@property NSString *myString;
- (IBAction)setDefault:(id)sender;
@end
...
@implementation AppDelegate
@synthesize window = _window;
@synthesize myString = m_myString;
- (void)applicationDidFinishLaunching:(NSNotification*)aNotification
{
self.myString = @"This is a string";
}
- (IBAction)setDefault:(id)sender
{
NSLog(@"%@", m_myString);
self.myString = @"This is a string";
NSLog(@"%@", m_myString);
}
@end
注意,我改变了@synthesize
来分配成员变量。
澄清:
self.myString = @"This is a string";
..是另一种语法...
[self setMyString:@"This is a string"];
您也可以直接设置成员...
[self willChangeValueForKey:@"myString"];
m_myString = @"This is a string";
[self didChangeValueForKey:@"myString"];
但是接下来你需要向观察者“通知”上面所说的绑定。
链接地址: http://www.djcxy.com/p/85243.html上一篇: Binding NSTextField to NSString
下一篇: Qt application shows emoji instead of unicode character