移开屏幕时保持对象状态

时间:2014-02-01 14:54:57

标签: ios iphone objective-c

我有一个类声明,其中包含一个管理数据的单例对象(称为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。如何保持其状态..任何想法? 希望这次我很清楚。

1 个答案:

答案 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中的状态来防止对象变为零。否则,只要从一个控制器移动到另一个控制器,前一个控制器的对象可能会变为零。