uiviewcontroller alloc меняет значение установщика / получателя при доступе?
Итак, я пытался выяснить это, и я понятия не имею... В основном, у меня есть два класса в моем приложении IOS, первый - мой основной вид, а второй - класс для хранения некоторых переменных. У меня есть переключатель, и когда состояние переключателя изменяется, он устанавливает логическое значение переменной getter/ setter в другом классе в это состояние. Затем я получаю значение и печатаю его в журнале. Однако я заметил, что каждый раз, когда вызывается viewcontroller, используя код:
StoredVars *stored = [[StoredVars alloc]init];
значение по умолчанию равно 0... Чтобы показать это, я добавил второй экземпляр вызова viewcontroller, и два вызова журнала выводят разные значения. Switchy является установщиком / получателем bool во втором классе "StoredVars". Может кто-нибудь объяснить, почему это происходит? ниже приведен код в файле.m моего первого класса:
StoredVars *stored = [[StoredVars alloc]init];
[stored setSwitchy:(_toggle.on)];
NSLog(@"%d", [stored switchy]);
StoredVars *stored2 = [[StoredVars alloc]init];
NSLog(@"%d", [stored2 switchy]);
Если я включаю переключатель, первый журнал печатает 1, второй печатает 0. Если я выключаю, они оба печатают 0.
Спасибо всем:)
3 ответа
Эта линия
StoredVars *stored = [[StoredVars alloc]init];
Уничтожает все, что ранее хранится в вашем stored
переменная и создание нового объекта, другими словами, каждый раз, когда вы вызываете эту строку, предыдущее содержимое "store" уничтожается. Вам нужно инициализировать его только один раз (может быть, в вашем ViewController init
метод), и продолжайте использовать его без повторной инициализации.
[stored setSwitchy:(_toggle.on)];
Сеттер и геттер таковы:
- (void)setSwitchy:(BOOL)bSwitchy
{
_bSwitchy = bSwitchy;
}
- (BOOL)switchy
{
return _bSwitchy;
}
поэтому значение свойства изменяется в установщике. второй выводит 0, то есть вы не вызывали установщик, тогда вы получите повторное значение по умолчанию.
между прочим, сохраненный и сохраненный2 - полностью два объекта.
Я знаю, что у вас есть два ViewController Right.
Поэтому я назову их Viewcontroller, в котором находится коммутатор. и AnotherviewController, где вы хотите переключить эффект.
1) в Viewcontroller Когда значение переключателя изменилось> поместите этот код.
AnotherViewController *anotherVc=[[AnotherViewController alloc]init];
[anotherVc setToggle:sw]; //sw will be your switch changed value.
2) в файле Anotherview Controller.h
@interface AnotherViewController : UIViewController
{
int _toggle;
}
@property(nonatomic,assign)int toggle;
3) Синтезировать переключатель и в файле AnotherviewController.m
-(void)setToggle:(int)toggle1{
toggle=toggle1;
}
4) В viewWillAppear или любом другом, где вы можете проверить
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
if(toggle)
swithlbl.text=@"YES";
else
swithlbl.text=@"NO";
}