0

ビューコントローラーの複数のメソッドで可変整数を使用しようとしています。secondsLeft 変数は正常に機能しますが、otherNumber 変数は機能しません。エラーが表示されます: 初期化子要素はコンパイル時の定数ではありません。これをどのように行うべきかについてのアイデアはありますか?ありがとう!

@interface ViewController ()

@end

@implementation ViewController
@synthesize countDown,Timerlbl;

int secondsLeft = 500;

int otherNumber =[(AppDelegate *)[UIApplication sharedApplication].delegate otherNumber];
4

3 に答える 3

2

問題は、グローバル変数として宣言otherNumberしたことと、コンパイラが最初の割り当てがコンパイル時の定数であると想定していることです。[delegate otherNumber]結果としてセレクタが呼び出され、これはコンパイル時の定数ではありません。

解決策は、割り当てをコードに移動することです。例えば:

- (id)init
{
    self = [super init];
    if(self) {
        otherNumber = [(AppDelegate *)[UIApplication sharedApplication].delegate otherNumber];
    }

    return self;
}

別の注意として、グローバル変数は一般に、Objective-C ではお勧めできません。@property一般に、値はより推奨されます。それだけでなく、ViewControllerクラスはAppDelegate. AppDelegateのインスタンス化を担当するのはおそらくあなたであるためViewController、 の値に挿入することを検討してくださいotherNumber。例えば:

@interface ViewController ()
@property (nonatomic, assign) int otherNumber;
@end

- (id)initWithSomeNumber:(int)otherNumber
{
    self = [super init];
    if(self) {
        self.otherNumber = otherNumber;
    }

    return self;
}
于 2013-02-03T09:41:22.557 に答える
0

それAppDelegateがアプリのデリゲート クラスの名前だと思いますか?

このように、AppDelegate のインポートを追加しようとしましたか...

#import "AppDelegate.h"

@interface ViewController ()
于 2013-02-03T09:19:23.313 に答える
0

コンパイラは のインスタンスを作成できずAppDelegate、 の値がどうあるべきかを尋ねることができないため、このような変数を宣言することはできませotherNumberん。

使用方法によっては、変数をまったく定義せずに、使用するたびotherNumberに取得する方がよい場合があります。AppDelegateこれはもう少し入力することを意味するかもしれませんが、常に最新の正しい値を取得できることを意味しますotherNumber

また、一般的に整数変数を定義するNSInteger代わりに使用することをお勧めします。int

于 2013-02-03T09:48:58.947 に答える