objective-c - cocoa 文本字段返回 null

标签 objective-c cocoa class methods textfield

抱歉,如果它有点长,但我想尽可能具有描述性。 我正在制作一个包含多个类和 2 个 nib 文件的测试应用程序(每个类都是一个 nib 的所有者)。其中一个 nib 文件有一个文本字段,另一个有一个按钮。当按下另一个 Nib View 中的按钮时,我试图记录文本字段内的所有内容,但它返回(空)。在其中一个类(ViewClass)中,我有这个:

- (IBAction)startAction:(id)sender {
MyClass *anInstance = [[MyClass alloc] init];
NSString *string= [anInstance name];
NSLog(@"startAction logged: %@", string);

“名称”是 MyClass 的一个属性。我想要做的是在 MyClass 的 init 中设置“name”,这样,当初始化 anInstance 时,MyClass init 方法会执行以下操作:

- (id)init {
if ( self = [super init] )   {
    [self setName:[nameInput stringValue]];
    NSLog(@"init value: %@", name);
}
return self;

“NameInput”是文本字段。我认为这会返回文本字段中的任何内容,但我得到的是 null 。当我使用 setName:@"text" 时,它可以正常传递,因此文本字段出现问题。

我之前用我自己的 getter 做到了这一点,在这种情况下,当从它自己的类调用该方法时,它不会返回 null,但如果它是从另一个类初始化并调用的,那么它会返回 null,我用的是这个:

- (NSString *)name {
NSLog(@"nameMethod = %@", [nameInput stringValue]);
return [[[nameInput stringValue] retain] autorelease];

这样,我可以看出一切都已正确设置,但是当我从 ViewClass 初始化 MyClass 并尝试获取“名称”时,会发生一些情况,它一直说文本字段为空。

不确定它是否有帮助,但带有按钮的 Nib 属于 MyView (它是 NSViewController 的子类),文本字段属于 MyClass (NSObject 的子类)。

有人建议该字段没有正确链接,但如果这是真的,那么当从它自己的类调用时它就不会起作用,但它确实起作用了。其他人提到这可能是文本字段初始化为 nil 的问题,所以我尝试了上面的 init 方法。到目前为止,这两种方法都没有奏效。

感谢您的帮助。

最佳答案

awakeFromNib(即对象的 init 方法运行之后)之前,不能保证 IBOutlet 已连接。您需要在 awakeFromNib 中进行 Nib 设置。

回家后编辑:抱歉,我之前没有仔细阅读。我上面说的是事实,但还有更深层次的问题。我现在发现您也在处理两个不同的对象 - 一个在 Nib 中,一个在代码中创建。如果 Nib 中有一个对象,其导出连接到界面元素,则不会使该类的其他对象也有引用该元素的实例变量。两个独立创建的 MyClass 实例不会共享相同的实例变量,就像程序中的每个 NSArray 都不会保存相同的项目集一样。如果您想使用 Nib 中的实例,则需要使用实例。

如何做到这一点取决于您如何构建程序。没有简单的[self magiclyGetObjectFromNib]。不知何故,一个对象需要要么找到另一个对象(例如,通过知道 Nib 的所有者),要么通过一个了解它们的对象来告知另一个对象。

关于objective-c - cocoa 文本字段返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990803/

相关文章:

iphone - NSURLRequest 委托(delegate)未在设备上被调用在模拟器上工作正常。

ios - 核心数据更新时自定义 UITableViewCell 子类更新

xcode - 不激活全屏模式的 Kiosk 风格 - OS X

ruby - 在运行时在模块/命名空间中创建一个类

delphi - 当一个类已经扩展了一个类和一个接口(interface)时如何继承另一个类

objective-c - UPnP 端口映射,服务不接受连接

ios - 更改 UIPickerView 文本的颜色

objective-c - NSPopUpButton-如何有选择地禁用某些菜单项?

objective-c - 文本字段可以自动识别电话号码和链接吗?

file - Flutter 开发人员应该在一个文件中放入多少个无状态小部件类?