2012-06-01 143 views
0

我試圖將值傳遞給委託中的方法,並返回NSString值。出於某種原因,我得到一個沒有在代理錯誤中找到的屬性。我會很感激任何幫助。這裏是我的代碼:將值傳遞給委託方法

delegate.h

- (NSString*) getSoundFilePath:(int)pageNumber; 

delegate.m

-(NSString*) getSoundFilePath:(int)pageNumber{ 
    switch (pageNumber) { 
     case 1: 
      return soundFilePathPage1; 
      break; 
     case 2: 
      return soundFilePathPage2; 
      break; 
     case 3: 
      return soundFilePathPage3; 
      break; 
     case 4: 
      return soundFilePathPage4; 
      break; 
     case 5: 
      return soundFilePathPage5; 
      break; 
     case 6: 
      return soundFilePathPage6; 
      break; 
    } 
    return nil; 
} 

app.m

int page = 1; 
NSString *audioFilePath = appDelegate.getSoundFilePath:page; 
//that's where i get the error 
+2

這是一個完全沒有錯誤。您的應用程序委託沒有名爲'getSoundFilePath'的屬性,它有*方法*,名爲'getSoundFilePath:'。即使有,也不能將參數傳遞給屬性。正如答案中所述,您應該閱讀一些Objective-C的介紹。 – Cyrille

+1

還要注意,方法名稱中的前導「get」在ObjC中具有特定含義(這意味着該方法需要一個將用返回值更新的指針)。此方法的正確名稱是'soundFilePathForPageNumber:'。 –

回答

3

你笑uld尋找一個客觀的c介紹。

正確的路線將是

NSString *audioFilePath = [appDelegate getSoundFilePath:page]; 
+0

啊,當然。感謝那。我是否正確地說我使用的語法是「setter」語法,而方括號本質上是「getter」語法? – garethdn

+1

不,getter和setter都通過括號訪問,因爲它們是方法。通過class.property,你可以直接訪問屬性而不需要使用setter或getter。既然你聲明瞭一個方法,你不能作爲一個屬性來訪問它。 – jimpic

+1

@jimpic實際上,通過'class.property'你仍然使用setter/getter。這只是編寫方法調用的一種較短的方式。一般來說,getter方法可以使用點語法,即使它們沒有聲明爲屬性。 – Sulthan