我有一个类声明,其中包含一个管理数据的单例对象(称为sharedDatacontroller)。
现在还有很多其他的屏幕和声明是最后一个。我必须检查用户是否从声明屏幕移回并更改任何数据,然后必须重置声明屏幕上的开关按钮。
我的方法:
-(void) viewWillDisappear:(BOOL)animated
{
self.sharedControllerClone=sharedController;
}
-(void) viewWillAppear:(BOOL)animated
{
if ([self.sharedControllerClone isEqual:sharedController])
{
NSLog(@"Not Same");
self.acceptDeclarationSwitch.on= self.acceptDeclarationSwitch.on;
}
else
{
self.acceptDeclarationSwitch.on= !self.acceptDeclarationSwitch.on;
}
}
但是当从后面屏幕导航后控件进入时,self.sharedControllerClone正在重置为Nil。如何保持其状态..任何想法? 希望这次我很清楚。
答案 0 :(得分:3)
您可以通过在AppDelegate中创建宏并为AppDelegate中的属性指定不同的状态来尝试此操作,这样您就会知道您当前的状态是什么。您可以在所需的控制器和ViewDidLoad中创建AppDelegate的对象,您可以将当前状态分配给AppDelegate,如下所示:
//in AppDelegate
#import <UIKit/UIKit.h>
#define FIRST_CONTROLLER 1
#define SECOND_CONTROLLER 2
#define THIRD_CONTROLLER 3
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property int previousControllerState;
@end
然后,您可以在所需控制器的ViewDidLoad中设置previousControllerState。
//in your ViewControllers
- (void)viewDidLoad
{
[super viewDidLoad];
app.previousControllerState = FIRST_CONTROLLER;
}
您可以在下一个控制器中检查状态是否有条件。
你必须采用AppDelegate中的状态来防止对象变为零。否则,只要从一个控制器移动到另一个控制器,前一个控制器的对象可能会变为零。