Cocoa中的setString与setStringValue

neu*_*cer 0 cocoa

我试图使用方法setString来更改文本字段中的文本,但它不起作用.然后我将其更改为setStringValue并且它有效.那么setString用于什么?

Rob*_*ier 7

NSTextField没有setString:方法.NSTextField是一种类型NSControl,并NSControl有一种setStringValue:方法.

NSText而它更着名的子类NSTextView有一个setString:方法.@John Boker说现场编辑器是正确的NSText,但即使在编辑模式下你仍然无法发送setString:NSTextField.你需要从窗口获取字段编辑器,然后调用setString:它(不是你真的应该这样做).

虽然这对新手来说很困惑,但不同方法背后有一个很好的理由.NSControl有一个"值",该值可以采用不同的类型(setDoubleValue:,setObjectValue:等).这允许我将值设置为double,但然后以字符串形式检索.对于广泛的可能控制,这很有意义,而且非常灵活.NSText不是一个控制; 注意它是如何不具有setAction:setTarget:任.其目的是显示和编辑(归因)字符串.当你打电话时string,你实际上得到的是真正的后备文本存储,而不仅仅是字符串形式的对象值(就像stringValue那样NSControl).

也就是说,当你说"它不起作用"时,我希望你的意思是你有一个编译器警告,告诉你这NSTextField可能没有回应setString:.如果你忽略编译器警告,那么你将在ObjC中遇到很多问题.