2012-01-29 5 views
4

私はかなり大きなView Controllerをアプリケーションに持っており、いくつかの機能をカテゴリに分けてクリーンアップしたいと思います。私はカテゴリを実装する方法をよく読んでと持っている:私の.h(カテゴリがStatsVC + TableViewDelegateと呼ばれている)としてカテゴリIvarsを認識しない

#import "StatsVC.h" 

@interface StatsVC (TableViewDelegate) 

@end 

。 と私Implemationは次のように起動します:

@implementation StatsVC (TableViewDelegate) 
カテゴリに

数回は、私が読んでいると、おそらくこれが許可されているオリジナルclass.Iのアイバーズある変数にアクセスするが、中IVARのすべての使用のために カテゴリ私は、このエラーメッセージを得る:なぜこれが起こっている誰もが

'Use of undeclared identifier 'iVar'

を知っていますか?

ありがとう、

答えて

5

あなたは間違いなくカテゴリのメソッドからインスタンス変数にアクセスできます。カテゴリはクラスにメソッドを追加します。クラスインタフェースで宣言されたメソッドとそのクラスのカテゴリで宣言されたメソッドの間には、実行時に大きな違いはありません。良い答えを得るには、おそらくより多くのコードを表示する必要があります。今、私の上の2つの推測は、次のとおりです。

  1. あなたはクラスメソッドではなく、インスタンスメソッド、-の代わりに+で始まる、すなわち1からアイバーズにアクセスしようとしています。

  2. イーバールを宣言した方法に問題があります。

+0

ありがとうございましたCaleb、ivarsはプロパティで作成され、次に合成されます。 CategoryにあるメソッドはすべてtableViewDelegateメソッドです。ここに例があります:@property(nonatomic、strong)Session * selectedSession;クラスの宣言です。カテゴリでは、次のようにアクセスします。 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return(2 + [[selectedSession pieceSession] count]); } –

+0

この場合、ivarsは実際にはそのカテゴリでは宣言されていません。つまり、.hファイルしか見えないので、ivarsが何であるかを知る方法はありません。プロパティを使用しているので、直接ivarsにアクセスするのではなく、カテゴリメソッドのプロパティを使用する必要があります。 ivarsに直接アクセスしたい場合は、クラスインタフェースで直接ivarsにアクセスしてください。 – Caleb

+0

ありがとうたくさんのCaleb、これはトリックでした。あまりにもあなたがカテゴリからそれらを宣言せずに合成ivarsにアクセスすることはできません悪い... –

関連する問題