objective-c - 将 NSTextField 绑定(bind)到 NSString

标签 objective-c binding xcode4.3 cocoa-bindings nstextfield

我有一个非常简单的问题,希望有人能在我开始理解绑定(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/

相关文章:

c# - 为什么我的绑定(bind)只能以一种方式工作?

c# - 为什么我的应用程序图标不透明?

iphone - iPhone openssl无法编译

ios - 在 UITextView 中格式化文本

iphone - Facebook SSO 并请求 iOS SDK

java - 路径转换绑定(bind)

c - 如何创建具有多个参数的函数(va_list)?

ruby - 使用 Xcode 4.3 在 OS X Lion 上安装 Ruby <1.9.3 的正确方法是什么?

iphone - 我需要像程序员一样思考 : Childs and Parents in Cocos2d, 程序结构、枚举等

Objective-C 泛型不适用于方法? (Xcode 7 测试版(内部版本 : 7A120f))