2011-12-22 20 views
4

私は少し問題があります。目的C - カテゴリ内の静的変数

MyView1Controller.h MyView1Controller.m MyView1.xib

MyView2Controller.h MyView2Controller.m MyView2.xib

MyView3Controller.h :私のUIViewControllesは全て同じスキームで命名されているので MyView3Controller.m MyView3.xib

ファクトリメソッドを使用してUIViewControllerを初期化することをお勧めします。 そこで私はのUIViewControllerにCateogry実装します:

static NSString *standardNibFileName; 

@interface UIViewController (FactoryInstantiation) 

+ (id) standardViewController; 

@end 

をそしてMyView1Controllerコントローラで、私は、静的なnibファイル名の変数を宣言します:

static NSString *standardNibFileName = @"MyView1"; 

@implementation MyView1Controller 

その後、私はこの方法を使用してすべての私のUIViewCOntrollersをインスタンス化できます。

@implementation UIViewController (FactoryInstantiation) 

+ (id) standardViewController; 
{ 
    if(standardNibFileName != nil) { 

     NSString *className = NSStringFromClass([self class]); 
     Class classToIntantiate = NSClassFromString(className); 
     return [[classToIntantiate alloc] initWithNibName:className bundle:nil]; 
    } 

return nil; 
} 

@end 

INIT:

MyView1Controller *a = [MyView1Controller standardViewController]; 

しかし、静的変数は常にnilです。

この問題の解決方法に関するご提案はありますか?

私は助けていただきありがとうございます!

ありがとうございます。

+0

+1は創造的です。 –

+0

あなたのカテゴリでは、スタティックがnilであるかどうかチェックし、スタティックであればそれを初期化します。 –

+0

ご協力ありがとうございます! これを初期化するとどういう意味ですか?このカテゴリにはnibファイルの名前はありません。 NSStringFromClassの名前を編集して名前を "計算"する必要はありません。 – Alexander

答えて

1

あなたが実装するクラスに

+ (NSString*) getStandardNibFileName { 
    return @"nibName" 
} 

編集を代わりにUIViewControllerクラスに+メソッドを宣言し、オーバーライドすることができます実装するクラスがベースと同じnibNameを持っている場合は、関数をオーバーライドする必要はありません。

+0

あなたの答えをありがとう!ええ、それは私が最初に思ったことですが、その後、私はすべてのviewcontrollerでこのメソッドを実装する必要があります。外にもっと簡単な方法はありませんか? – Alexander

+0

まあ、実装外の静的変数を宣言しています。つまり、クラスに属さないことを意味しますが、.hファイルをインポートすると、静的変数も取得されます。 –

+0

別の解決方法は、文字列を文字列で定義することです。#define sNibName @ "nibName" –

0

静的NSString * standardNibFileNameがあります。 .hファイルでも、削除してみてください。 静的NSString * standardNibFileName = @ "MyView1"; .mは十分以上です

+0

ありがとうございます。残念ながら、カテゴリ実装は静的変数を知らなくてもコンパイルできません。私は.mファイルで宣言できましたが、もう一度やり直してください... – Alexander

関連する問題