1

私は常にゼロを返す NSInteger を持っています:(私はそれを次のように宣言しました:

NSInteger level;
@property(nonatomic, assign) NSInteger level;

合成:

@synthesize fileName, filePath, theActualIndexPath, titleBar, level;

次に、使用NSLog(@"%d", level)後でも常に0を返す場合

level++; 

または

level += 1;

私が間違っていることは何ですか?に1を追加することは100%確信してlevelいますが、何が悪いのか理解できません:(

編集:

この NSInteger を使用する if ステートメント

if (level == 0) {
    self.navigationItem.title = @"Test";

} else {
    self.navigationItem.title = self.titleBar;

}

1を追加した後でも、常に最初に終了します

4

3 に答える 3

1

if変更される変数は、(ステートメントで) アクセスされる変数と同じではありません。

コンソールで、level設定されている場所 (前と後) と s がアクセスされている場所 (ifステートメント内) の両方の値とアドレスを出力します。

于 2011-12-09T17:42:10.470 に答える
1

なぜあなたはlevel2回宣言しているのですか?

次の行を削除します。NSInteger level;

の最初の宣言levelはグローバル スコープの変数で、2 番目はクラスのインスタンス変数です。スコープに応じて、 によってlevelインクリメントされることは、 によって出力され、によってテストされることと++levelは異なります。levelNSLog("%d", level);if (level == 0)

編集

はい。levelビュー コントローラーの別のインスタンスを割り当てた場合に、新しく割り当てられないと予想されるのはなぜですか? それをしたい場合は、変数を作成しstaticて同じクラスのインスタンス間で共有するか、次のようにする必要があります。

MyViewController *newViewController = [[MyViewController alloc] init]; // However this goes
newViewController.level = oldViewController.level; // Make sure you pass the level on
于 2011-12-09T17:58:18.227 に答える
0

これを試してください:
.hで

@property(nonatomic) NSInteger level; // not an object assign not needed

.m で

@synthesize level = _level;  
self.level = self.level + 1;  // and try this

そして、行を削除します

NSInteger level;

これは稼働していますか?

于 2011-12-09T17:22:33.453 に答える