好的,所以我一直试图解决这个问题,我不知道......基本上,我的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.
谢谢大家:)
答案 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";
}