2012-01-29 260 views
4

我在我的應用程序中有一個相當大的視圖控制器,我想通過將某些功能分類來清理它。我對如何實現一個類別念起來有:類別無法識別Ivars

#import "StatsVC.h" 

@interface StatsVC (TableViewDelegate) 

@end 

由於我的.h(類別被稱爲StatsVC + TableViewDelegate)。 和我Implemation開始是這樣的:

@implementation StatsVC (TableViewDelegate) 

的類別有好幾次,我訪問的是原始class.I的實例變量已經閱讀並推測這是允許的變量,但在每次使用伊娃的類我收到此錯誤信息:

'Use of undeclared identifier 'iVar'

有誰知道爲什麼發生這種情況?

謝謝,

回答

5

你絕對可以從類別中的方法訪問實例變量。類別向類中添加方法 - 在運行時在類接口中聲明的方法和該類中的類別中聲明的方法之間沒有真正的區別。您可能需要展示更多代碼才能獲得良好的答案。現在,我的前兩名猜測是:

  1. 你試圖從一個類的方法,而不是一個實例方法,即一個開始用+代替-訪問高德。

  2. 您宣佈ivars的方式有問題。

+0

感謝Caleb,ivars是用屬性創建然後合成的。類別中的方法都是tableViewDelegate方法。這裏有一個例子:@property(nonatomic,strong)Session * selectedSession;是它在課堂上的聲明。在類我訪問它像這樣: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return(2 + [[selectedSession pieceSession] count]); } – 2012-01-29 04:32:22

+0

在這種情況下,ivars確實沒有在類別中聲明 - 它只能看到.h文件,因此無法分辨ivars可能是什麼。由於您使用的是屬性,因此您應該最有可能在類別方法中使用屬性,而不是直接訪問ivars。如果您想直接訪問ivars,請在類接口中自行聲明它們。 – Caleb 2012-01-29 04:39:29

+0

謝謝很多迦勒,這個伎倆。太糟糕了,如果不從類別中聲明它們,就無法訪​​問合成的ivars。 – 2012-01-29 04:49:35