【问题标题】:NSTextField won't setStringValueNSTextField 不会设置StringValue
【发布时间】:2011-10-03 21:20:28
【问题描述】:

我刚刚开始使用一个包含 NSTextField 的 NSWindow。 appdelegate.h 有这个:

NSWindow *window;
NSTextField *userIDText;

@property (nonatomic, retain) IBOutlet NSWindow *window;
@property (nonatomic, retain) IBOutlet NSButton *nextButton;
@property (nonatomic, retain) IBOutlet NSTextField *userIDText;

appdelegate 在 Interface Builder 中连接到窗口和文本字段,然后在 .m 文件中:

@synthesize userIDText;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [userIDText setStringValue:@"user"];
    NSLog(@"UserIDTextString: %@", [userIDText stringValue]);

(我还尝试了除@“user”作为字符串之外的其他东西) 日志仅显示 (null),文本字段未更改。我究竟做错了什么?我现在在互联网上搜索了大约 5 小时,这显然是我想念的非常简单的事情。

【问题讨论】:

  • 你的插座设置好了吗?设置断点以确保 userIDText 不是 nil
  • 我之前做过这个,只是想写“当然,就像说我在 Interface Builder 中连接了它们”,但后来我检查了一下,它不是。也许我首先做错了什么,然后在尝试修复它时我再次取消了插座。谢谢你提示我正确的方向:)

标签: objective-c xcode cocoa interface-builder nstextfield


【解决方案1】:

您的applicationDidFinishLaunching 方法在窗口加载之前被调用。这就是为什么NSLog(@"UserIDTextString: %@", [userIDText stringValue]); 打印 null 并且您无法设置文本字段的值的原因。尝试使用awakeFromNib 方法。

【讨论】:

  • 假设接收-applicationDidFinishLaunching:消息的应用程序委托的窗口和实例都在主nib文件中,如果应用程序委托接收-applicationDidFinishLaunching:消息,这意味着nib文件必须已经加载。换句话说,首先发送-awakeFromNib,然后发送-applicationWillFinishLaunching:,然后发送-applicationDidFinishLaunching:
【解决方案2】:

刚刚发现您的问题,因为我遇到了同样的问题。 问题是,如果您在预先创建的“MainMenu.xib”中创建一个带有按钮和内容的窗口,您不会将所有内容连接到“文件所有者”,而是连接到左侧单独生成的“App Delegate”对象。

我很确定您已经解决了这个问题。 认为它可能对遇到同样问题的其他人有所帮助。

最好的问候!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多