2012-06-01 145 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