2010-06-14 11 views
0

我在我的頭文件中定義像這樣如何在Objective C中的同一個類中使用訪問器?

@property (assign) bool connectivity_N; 
@property (assign) bool isConnected_N; 

我在執行文件中的一些屬性我有一個init和像這樣

@implementation Map 
@synthesize connectivity_N; 
@synthesize isConnected_N; 

一個初始化設置初始值等的合成屬性所以

-(id) init 
{ 
    if((self=[super init])) 
    { 

     //initialise default properties 
     self.connectivity_N=NO; 
      self.isConnected_N=NO; 
    } 
    return self; 
} 

我遇到了一個錯誤,指出錯誤:訪問未知'connectivity_N'類的方法。在這個類別內的公開方法

+(bool) isConnectable:(directions) theDirection{ 

    bool isTheDirectionConnectable= NO; 
    switch (theDirection) { 
     case north: 
      isTheDirectionConnectable= self.connectivity_N; 
      break; 

我不知道爲什麼這是因爲我試圖抓住財產的價值。根據蘋果開發者文檔「與屬性相關聯的getter和setter方法的默認名稱分別是propertyName和setPropertyName:例如,給定屬性」foo「,訪問器將是foo和setFoo:」

這給了我一個線索,我在這裏做了一些錯誤,對於客觀的C我很新,所以會花時間向我解釋這一點。

謝謝!

回答

3

您已將isConnectable:定義爲類方法,前綴爲+。可能你希望它是一個實例方法 - 用一個減號-來代替它。

在類方法中不能訪問self,因爲沒有對象實例。

儘管self存在於類方法中,但它不引用對象實例 - 沒有對象 - 因此您無法訪問對象屬性。 (感謝Dave DeLong進行更正。)

+1

+1,除了'self'在類方法內工作。它指的是「Class」本身。 (所以你可以做''self myClassMethod'') – 2010-06-14 22:33:49

+0

啊,謝謝,這很有趣。我從來沒有想過嘗試過! – walkytalky 2010-06-14 22:38:39

+1

這樣做更好,所以繼承正常工作。例如,如果您的'[Foo foo]'類方法調用'[[[self alloc] init] autorelease]'而不是'[[[Foo alloc] init] autorelease]',那麼子類就可以免費獲得它。 – Chuck 2010-06-15 00:45:00

相關問題