2012-04-28 22 views
0

私はIIViewDeckControllerを私のアプリケーションに実装しています。初期化要素がコンパイル時定数エラーではありません

私はエラーを取得し、その画面に移動するにはIBAccountを交換しようとしていた場合:

Initializer element is not a compile time constant

コードの最初のセクションでは、私が今持っているものである、とUIViewControllerはそのI IIViewDeckControllerからですFirstAccountViewControllerを読み込むために使用します。

-(IBAction)account{ 
    FirstAccountViewController* ab=[[FirstAccountViewController alloc] init]; 
    [self.navigationController pushViewController:ab animated:YES]; 
    UIViewController* leftController = [[UIViewController alloc] init]; 
} 

UIViewController* leftController = [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController = [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController 
                      rightViewController:rightController]; 
+0

メソッドボディ外でこれらの変数は何ですか?彼らは何のためであり、どこでそれらを使用しようとしていますか? –

+0

@JacquesCousteau彼らはコンパイル時定数ではない(終わりの風刺) –

+0

@ H2CO3:あなたの皮肉が私に向けられているかどうかは分かりません。私はエラーが何を意味するのか知っていますが、私は生産的な方法で質問に答えることができるように、Maxが変数と関係していることを理解しようとしています。 –

答えて

0
UIViewController* leftController = [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController = [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController]; 

ええ、それは間違っている - 、あなたはinitalizer機能を使用する必要があります(あなたがすべてでグローバル変数を使用することをお勧めではないですが)あなたが起動時にグローバル変数を初期化したい場合は:ここ

UIViewController *leftController; 
IIViewDeckController *deckController; 

__attribute__((constructor)) 
void __init() 
{ 
    leftController = [[FirstAccountViewController alloc] init]; 
    deckController = [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController]; 

} 
+0

私はただそれをグローバル変数として適用する必要がありますそれはその1ページのために働く? –

+0

いいえ、元の質問にグローバル変数が含まれていたので、私もそれらを使用しました。それにもかかわらず、あなたは非常に正当な理由がない限り、使用することをお勧めしません。 –

1

あなたが宣言したグローバル変数:

UIViewController* leftController = 
    [[FirstAccountViewController alloc] init]; 
IIViewDeckController* deckController = 
    [[IIViewDeckController alloc] initWithCenterViewController:self.centerController leftViewController:leftController rightViewController:rightController]; 

とあなたがそれらを初期化しようとしているwithou文脈(例えば、あなたが渡すパラメータ - グローバルはありませんself)。

ここではグローバル変数は必要ありません。このコンテキストでは適切に初期化できないため、またCおよびObjCで作成されていないため、グローバル変数を宣言することはできません。

この場合は、ivarを使用することをおすすめします。

+0

ありがとうございます。まだobjcに慣れているので、わからないことを許してください。 ボタンを押したときに実行できるようにするには、UIViewControllerをIBActionクラスに配置する必要がありますか? –

+0

@MaxRoper正しい答えはありません - あなたのアプリのロジックによって異なります。 – justin

関連する問題