2012-01-29 183 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