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";
}
Другие вопросы по тегам