2010-07-07 33 views
0

我試圖使用方法setString來改變文本字段中的文本,但它不起作用。然後我將其更改爲setStringValue,它工作。那麼setString用於什麼?setString與setStringValue在Cocoa

+0

請不要將問題標記爲「xcode」(或「xcode3.2」或「xcode3.2.3」或類似的東西),除非它實際上與Xcode IDE有關。這個問題是關於可可。 – 2010-07-07 21:56:45

回答

7

NSTextField沒有setString:方法。 NSTextField是一種NSControlNSControl有一個setStringValue:方法。

NSText及其更着名的子類NSTextView有一個setString:方法。 @John Boker現場編輯器是NSText是正確的,但即使在編輯模式下,您仍然無法將setString:發送到NSTextField。你需要從窗口中獲取字段編輯器,然後在那裏調用setString:(不是你真的應該那樣做)。

雖然它讓新人感到困惑,但不同方法背後有一個很好的理由。 NSControl有一個「值」,並且該值可以採用不同的類型(setDoubleValue:,setObjectValue:等)。這使我可以將該值設置爲double,但隨後以字符串形式檢索。對於廣泛的可能控制範圍,這很有意義且非常靈活。 NSText不是控件;請注意它如何不具有setAction:setTarget:。其目的是顯示和編輯(歸屬)字符串。當你打電話給string時,你實際上得到了真正的支持文本存儲,而不僅僅是字符串形式的對象的值(stringValueNSControl)。這就是說,當你說「它不工作」時,我希望你的意思是說你得到了一個編譯器警告,告訴你NSTextField可能不會響應setString:。如果你忽略了編譯器警告,那麼你在ObjC中會遇到很多問題。

+0

進一步深入研究「價值」概念:許多NSControls(如滑塊)都有一個數值,並且'stringValue'對他們來說同樣有效。您可以要求控件的值爲double(doubleValue),float(floatValue),int(intValue),NSInteger(integerValue)或者NSString對象中的十進制文本表示('stringValue'),並使用匹配的setter方法將這些值設置爲任何類型。一個值,許多類型。與控件不同,文本視圖沒有這個;它只是有它的字符串。 – 2010-07-07 21:51:50

1

去多一點一般(相對於我的評論羅布的回答):

對象響應消息。您可以向任何響應該消息的對象發送消息;你不能發送消息給任何不響應的對象。

NSText及其子類NSTextView的實例響應setString:,因此您可以發送NSText對象和NSTextView對象setString:消息。

NSControl及其子類的實例(包括NSTextField)響應setStringValue:,因此您可以發送NSControl對象,NSTextField對象和其他控件對象setStringValue:消息。

請參閱Rob的回答和我對此的評論爲什麼這兩個類層次結構的特定分支具有這些看起來相似但命名不同的方法。