好的,所以我一直在试图弄清楚这一点,但我不知道......基本上,我的ios应用程序中有两个类,第一个是我的主视图,第二个是存储一些变量的类。 我有一个开关,当开关的状态发生变化时,它会将另一个类中的布尔 getter/setter 变量设置为该状态。 然后我获取值并将其打印在日志中。 但是,我注意到的是,每次使用代码调用视图控制器时:
StoredVars *stored = [[StoredVars alloc]init];
该值默认为 0... 为了说明这一点,我添加了视图控制器调用的第二个实例,两个日志调用打印出不同的值。 Switchy 是第二类"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。
谢谢大家:)
此行
StoredVars *stored = [[StoredVars alloc]init];
正在销毁以前存储在stored
变量中的任何内容并创建一个全新的对象,换句话说,每次调用此行时,"store"的先前内容都会被销毁。您只需要初始化一次(可能在 ViewController 的 init
方法中),并继续使用它而不重新初始化它。
[stored setSwitchy:(_toggle.on)];
二传手和getter是这样的:
- (void)setSwitchy:(BOOL)bSwitchy
{
_bSwitchy = bSwitchy;
}
- (BOOL)switchy
{
return _bSwitchy;
}
因此,属性值在 setter 中正在更改。第二个打印一个0,即你没有调用setter,那么你getter将重新调整默认值。
顺便说一下,存储和存储2完全是两个对象。
你有两个视图控制器权限。
所以我称它们为放置交换机的视图控制器。和另一个视图控制器,你想要切换效果。
1) 在视图控制器中,当开关值更改时>放置此代码。
AnotherViewController *anotherVc=[[AnotherViewController alloc]init];
[anotherVc setToggle:sw]; //sw will be your switch changed value.
2) 在另一个视图控制器.h 文件中
@interface AnotherViewController : UIViewController
{
int _toggle;
}
@property(nonatomic,assign)int toggle;
3)合成切换 并在 OtherviewController.m 文件中
-(void)setToggle:(int)toggle1{
toggle=toggle1;
}
4)在视图中将出现或任何地方 你可以检查
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
if(toggle)
swithlbl.text=@"YES";
else
swithlbl.text=@"NO";
}