uiviewcontroller在访问时分配更改setter / getter值?

时间:2014-02-28 02:57:53

标签: ios objective-c cocoa-touch setter init

好的,所以我一直试图解决这个问题,我不知道......基本上,我的ios应用程序中有两个类,第一个是我的主视图,第二个是存储一些变量的类。我有一个开关,当切换状态改变时,它将另一个类中的布尔getter / setter变量设置为该状态。然后我得到值并将其打印在日志中。然而,我注意到每次使用代码调用viewcontroller:

StoredVars *stored = [[StoredVars alloc]init]; 

值默认为0 ...为了显示这一点,我添加了viewcontroller调用的第二个实例,两个日志调用打印出不同的值。 Switchy是第二类“StoredVars”中的bool setter / getter。有人可以解释为什么会这样吗?下面是我的第一个类的.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 个答案:

答案 0 :(得分:1)

这一行

StoredVars *stored = [[StoredVars alloc]init];

正在销毁先前存储在stored变量中的所有内容并创建一个全新的对象,换句话说,每次调用此行时,“store”的先前内容都会被销毁。您只需要初始化一次(可能在ViewController的init方法中),并继续使用而不用重新初始化它。

[stored setSwitchy:(_toggle.on)];

答案 1 :(得分:0)

setter和getter是这样的:

    - (void)setSwitchy:(BOOL)bSwitchy
    {

       _bSwitchy = bSwitchy;
    }

    - (BOOL)switchy
    {

       return _bSwitchy;
    }

所以属性值在setter中有所改变。 第二个打印一个0,即你没有调用setter,然后getter将重新调整默认值。

顺便说一句,存储和存储2完全是两个对象。

答案 2 :(得分:0)

我知道你有两个ViewController Right。

所以我会称之为放置Switch的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";
}