在Objective-C中为NSTextFields分配变量值

时间:2009-11-21 07:42:54

标签: objective-c nstextfield

我是Objective-C的完全新手,来自PHP的背景,BASIC的各种方言,以及一些C / C ++。虽然我觉得我已经在Interface Builder中设置了基本窗口,但是,我在操作文本字段的内容时遇到了麻烦,特别是调用它们的值并向它们发送值。

我正在使用一个基本的Xcode Cocoa应用程序模板,没有额外的东西,并创建了一个名为“controller.h”的Cocoa类。在Interface Builder中,我将一个带有安全文本字段的窗口,一个基本的NSTextField和一个用于提交表单的按钮组合在一起。我的控制器类是这样的:

//controller.h
#import <Cocoa/Cocoa.h>

@interface controller {
    IBOutlet id userInput;
    IBOutlet id userOutput;
}
- (IBAction)submitButton:(id)sender;
@end

//controller.m
#import "controller.h"

@implementation controller
- (IBAction)submitButton:(id)sender {
    NSBeep();
    [userOutput setStringValue: userInput];
    [userInput setStringValue:nil];
}
@end

我将userInput链接到Secure Text字段,userOutput链接到NSTextField。 submitButton链接到按钮。根据我对事物运作方式的理解,这应该将userInput中安全文本的值分配给userOutput,从而更新NSTextField中显示的内容,然后重置字段。如果正在调用函数,请发出哔哔声告诉我。

然而,哔哔声并没有消失,这意味着什么也没发生。 Interface Builder构建了文件,因此我知道它们已被正确定义并连接到适当的位置。如何修复它以便IBAction执行并将值发送到需要的位置?

1 个答案:

答案 0 :(得分:1)

查看是否被调用的更有效方法是设置断点(双击编辑器左侧的装订线)并调试应用程序。第一个建议是始终保持理智 - 检查你的联系。

此外,您可能希望改用此行:

[userOutput setStringValue:[userInput stringValue]];

(请注意-stringValue继承自NSControl,就像-setStringValue:一样。)


编辑:确保您实际实例化控制器对象可能会有所帮助。您可以向控制器添加-awakeFromNib方法并在其中放置断点以查看是否是这种情况。 (参见http://www.cocoadev.com/index.pl?AwakeFromNib)如果没有调用该方法,则也不会在IB中指定连接。