2013-03-29 26 views
0

進出口值讀一本書,在示例代碼中,他們展示瞭如何將的NSTextField的值分配到其他的NSTextField這樣的:如何分配的NSTextField 1至R的NSTextField 2

self.theStory.text = self.theTemplate.text; 

當我嘗試做同樣的,而不使用點符號:

[[self theStory]text] = [[self theTemplate]text]; 

我得到以下錯誤: 表達是不可轉讓。

Im新的Objective-C,任何幫助將不勝感激。

回答

0

當您使用括號,而不是點,你需要使用的setter方法的全名,並刪除=

[[self theStory] setText:[[self theTemplate] text]]; 

點標記,以我的經驗,最好用於設置或獲取狀態,通過寫或讀屬性或的keyPath(一的keyPath是方法鏈,例如self.datamodel.members.count)。當您執行某種操作時,括號符號是一個更好的選擇。在有些情況下,可能對沒有參數的方法使用點符號,但這會造成代碼混淆。例如,如果我有一個NSTimer實例myTimer,我會使用[myTimer fire]而不是myTimer.fire

+0

謝謝,這是有道理的。 –

0

事情是這樣的:

[[self theStory] setText:[[self theTemplate]text]] 
0

那是因爲你不能那樣做。點符號有兩個等價物,「名稱」形式和「setName:」形式。你會用[[self theStory] setText:[[self theTemplate] text]];

+0

我的背景是用C#編寫的,它使我完全理解使用Dot符號,我的許多Objective C朋友更喜歡Bracket notation,他們建議我習慣使用括號表示法。你有什麼建議?順便謝謝你的快速回復。 –

+0

有兩個參數。首先,理論上來說點符號只對屬性有效,並不是所有的「name」/「setName:」對都實現了屬性。而且在某些情況下,使用括號可以讓事情變得更清楚(儘可能難以置信)。 Plus ARC以多種方式混淆了整個問題。 –

+0

不完全正確。點符號對於setter和getter來說是完全有效的,即使它們是手動聲明的而不是'@ property'。對於不是獲取者的零參數方法,它是有效的,儘管令人困惑。 –