Cocoa 给定绑定到某个NSDate的NSTextField的IBOutlet,如何以编程方式设置新日期?

Cocoa 给定绑定到某个NSDate的NSTextField的IBOutlet,如何以编程方式设置新日期?,cocoa,Cocoa,我有一个很好的可重新使用的代码块,我正试图编辑和保持清洁的细节。我希望能够编辑某些NSTextField绑定到的NSDate。我唯一拥有的是文本字段的IBOutlet。这可能吗?我假设您尝试直接设置文本字段的对象值 如果不起作用,请使用找出绑定到的对象的属性,然后使用设置值:forKeyPath:设置该对象属性的值。我想如果您知道textField使用的日期格式,您可以: NSDateFormatter*myformatter=[[NSDateFormatter alloc]init] [myf

我有一个很好的可重新使用的代码块,我正试图编辑和保持清洁的细节。我希望能够编辑某些NSTextField绑定到的NSDate。我唯一拥有的是文本字段的IBOutlet。这可能吗?

我假设您尝试直接设置文本字段的对象值


如果不起作用,请使用找出绑定到的对象的属性,然后使用
设置值:forKeyPath:
设置该对象属性的值。

我想如果您知道textField使用的日期格式,您可以:

NSDateFormatter*myformatter=[[NSDateFormatter alloc]init]
[myformatter setDateFormat:textFieldDateFormat]
textField.text=[myformatter stringFromDate:yourdate]


如果您不知道格式,那么您可以尝试解析testField.text来找出它,但我认为这已经超过了我的薪资等级。

为NSTextField设置objectValue本身并不能深入到模型

我会尽力解释我在做什么。在我的应用程序中,我从一个简单的文本字段开始,它附带了一个NSDateFormatter。这注定是一次约会,一切都很好。后来,我想在文本字段旁边添加一个弹出式日历,以便用户可以单击他们的日期

现在,我没有对这种行为进行硬编码,而是尝试对解决方案进行泛化。最后,我编写了一个自定义辅助对象。我会将助手连接到文本字段和屏幕上的按钮,然后将按钮的操作设置为openPopup:在助手中。当用户弹出日历视图时,我的代码将日历视图绑定到textfield绑定到的同一个对象上,代码如下:

// Set the binding of the date picker in the panel to the same binding as the controlToBeHelped
NSDictionary *controlToBeHelpedBindings = [controlToBeHelped infoForBinding:@"value"];
[popupPanelDatePicker bind:@"value" 
                  toObject:[controlToBeHelpedBindings valueForKey:NSObservedObjectKey]
               withKeyPath:[controlToBeHelpedBindings valueForKey:NSObservedKeyPathKey] 
                   options:nil];
这在我的一个项目中非常有效。在我的新项目中,我想重新使用这段代码。这次NSDate可以为零。我想修改我的代码,这样如果用户在当前日期为零时单击按钮选择日期,我首先将其设置为“现在”,然后显示弹出窗口

因此,我需要编辑该控件通过IBOutlet绑定到的NSDate。谢谢

编辑:多亏了彼得,我想我成功了:

if ([[controlToBeHelpedBindings valueForKey:NSObservedObjectKey] valueForKeyPath:[controlToBeHelpedBindings valueForKey:NSObservedKeyPathKey]] == nil) {
    [[controlToBeHelpedBindings valueForKey:NSObservedObjectKey] setValue:[NSDate date] forKeyPath:[controlToBeHelpedBindings valueForKey:NSObservedKeyPathKey]];
}

然后您必须使用infoForBinding:为了发现模型,然后使用KVC在该属性中存储新的日期。(还有,你为什么要使用不同的帐户?)(编辑后)是的,我的建议没有改变。获取观察到的对象和密钥路径,使用[observedObject valueForKeyPath:observedKeyPath]检查是否为零,然后根据需要使用[observedObject setValue:[NSDate date]forKeyPath:observedKeyPath]。