NSInteger всегда ноль - PullRequest
       28

NSInteger всегда ноль

1 голос
/ 09 декабря 2011

У меня есть NSInteger, который всегда возвращает ноль :( У меня он объявлен как:

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

Синтез:

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

Тогда при использовании NSLog(@"%d", level) всегда возвращает 0, даже после

level++; 

Или

level += 1;

Что я делаю не так? Я на 100% уверен, что добавлю 1 к level, но не могу понять, в чем дело: (

EDIT:

Оператор if, где я использую этот NSInteger

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

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

}

Это всегда заканчивается первым, даже после добавления 1

Ответы [ 3 ]

1 голос
/ 09 декабря 2011

Изменяемая переменная не является той же самой переменной, к которой осуществляется доступ (в операторе if).

В консоли выведите значения и адреса level в том месте, где она устанавливается (переди после) и где осуществляется доступ к s (в операторе if.

1 голос
/ 09 декабря 2011

Почему вы объявляете level дважды?

Удалите эту строку: NSInteger level;

Первое объявление level является глобальной переменной, второе - переменной экземпляра класса.В зависимости от вашей области, level, который увеличивается на ++level, отличается от level, печатаемого NSLog("%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
0 голосов
/ 09 декабря 2011

Попробуйте:
в .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;

Эторабочий?

...