我尝试使用setString方法来更改文本字段中的文本,但不起作用。然后我把它改成了setStringValue,它起作用了。那么setString是用来做什么的呢?
发布于 2010-07-08 05:30:27
NSTextField没有setString:方法。NSTextField是NSControl的一种类型,NSControl有一个setStringValue:方法。
NSText及其更著名的子类NSTextView有一个setString:方法。@John Boker关于字段编辑器是NSText的说法是正确的,但是您仍然不能将setString:发送到NSTextField,即使在编辑模式下也是如此。您需要从窗口获取字段编辑器,然后对其调用setString: (并不是说您真的应该这样做)。
虽然这会让新手感到困惑,但在不同的方法背后有一个很好的理由。NSControl有一个“值”,该值可以采用不同的类型(setDoubleValue:、setObjectValue:等)。这允许我将值设置为双精度值,但随后将其作为字符串检索。对于广泛的可能控制,这是很有意义的,并且非常灵活。NSText不是一个控件;注意它既没有setAction:也没有setTarget:。它的用途是显示和编辑(属性)字符串。当您调用string时,您实际上获得了真正的后备文本存储,而不仅仅是字符串形式的对象的值(就像stringValue对NSControl所做的那样)。
也就是说,当你说“它不工作”的时候,我希望你的意思是你得到了一个关于这个的编译器警告,告诉你NSTextField可能不会响应setString:。如果忽略编译器警告,那么在ObjC中就会有很多问题。
发布于 2010-07-08 04:49:15
来自:http://macosx.com/forums/software-programming-web-scripting/43905-_outlet-setstring-testing-selector-not-recognized.html#5
NSTextField:用于NSText和NSText子类NSTextView,前者用于编辑NSTextField的字段编辑器,后者可以像在TextEdit中一样显示和编辑带样式的文本。
所以我认为你只能使用setString:当字段处于编辑模式时。
发布于 2010-07-08 05:55:57
通俗一点(与我对Rob答案的评论形成对比):
对象响应消息。您可以向任何响应该消息的对象发送消息;不能向任何不响应该消息的对象发送消息。
NSText的实例及其子类NSTextView响应setString:,因此您可以发送NSText对象和NSTextView对象setString:消息。
NSControl及其子类的实例(包括NSTextField )响应setStringValue:,因此您可以发送NSControl对象、NSTextField对象和其他控件对象setStringValue:消息。
请参阅Rob的回答和我对它的评论,了解为什么类层次结构的这两个特定分支具有这些看似相似但命名不同的方法。
https://stackoverflow.com/questions/3198635
复制相似问题