保存并恢复uinavigationcontroller的状态

时间:2012-10-17 13:34:58

标签: iphone objective-c ios

我的UINavigationController有问题。

我的应用程序有很多视图控制器,我正在使用导航控制器的推送和弹出功能进行切换。

我的要求是这样的:在我的应用程序中,当用户在第5个屏幕上并且用户单击主页按钮并再次双击主页按钮并从多任务栏中删除或终止应用程序然后用户点击应用程序图标(打开应用程序)应用程序应从它离开的地方开始,或应用程序应从第5屏幕开始。

我在applicationDidEnterBackground和applicationDidBecomeActive中的app delegate中执行代码,但它对我没有帮助

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

    self.viewArray = [[NSMutableArray alloc] init];
    UINavigationController* navController = self.navigationController;
    int viewcountt = [navController.viewControllers count];

    NSLog(@"descbefor -- %@",[navController.viewControllers description]);
    NSLog(@"kountbefor -- %d",[navController.viewControllers count]);


    for (int cont=0; cont < viewcountt; cont++)
    {
        [self.viewArray addObject:[navController.viewControllers objectAtIndex:cont]];

    }
}

我尝试保存self.viewArray但它无法保存。和后退。

是否可以这样做。

感谢。

1 个答案:

答案 0 :(得分:0)

我正在做类似的事情并创建了一个类来将不同分支的状态保存到NSUserDefaults。当每个场景加载时,我调用一个类方法来保存分支名称的当前场景。

这是班级:

接口文件:

#import <Foundation/Foundation.h>

@interface SceneController : NSObject

+(NSString *)getSceneNameWithBranchName:(NSString *)name;

+(void)saveSceneNameWithBranchName:(NSString *)name andSceneName:(NSString *)sceneName;

@end

实施档案:

#import "SceneController.h"

@implementation SceneController

+(NSString *)getSceneNameWithBranchName:(NSString *)name {
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *sceneName = [prefs valueForKey:name];

    return sceneName;
}

+(void)saveSceneNameWithBranchName:(NSString *)name andSceneName:(NSString *)sceneName {
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setValue:sceneName forKey:name];
    [prefs synchronize];
}

@end

这适用于我,并且可以在应用重启后继续使用。