0

我需要使用UIApplicationWillTerminateNotificationNSUserDefaults存储应用程序的当前状态,当用户从应用程序注销时,我需要加载具有先前状态的应用程序。我的应用程序是一个基于 TabBar 的应用程序,而它又是一个导航控制器。我需要存储加载在导航控制器中的当前视图控制器和导航控制器所在的当前选项卡。我的应用程序适用于不同的用户,我需要存储特定于用户的应用程序状态。所以,我也需要存储用户数据。我在 StackOverflow 中搜索并用 Google 搜索发现我们需要使用类似NSUserDefaultsUIApplicationWillTerminateNotification也是必要的。这是我第一次遇到这些东西。有人可以发布一些关于如何完成我的要求的教程或任何示例代码吗?

4

2 回答 2

1

您可以自己注册通知(请参阅 NSNotificationCenter)并在那里编写您的保存/加载代码,或者您可以将您的代码放在提供这些挂钩的 AppDelegate 中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
- (void)applicationWillResignActive:(UIApplication *)application;
- (void)applicationDidEnterBackground:(UIApplication *)application;
- (void)applicationWillEnterForeground:(UIApplication *)application;
- (void)applicationDidBecomeActive:(UIApplication *)application;
- (void)applicationWillTerminate:(UIApplication *)application;

查看 AppDelegate.m 文件,您可以看到存根实现以及一些关于如何使用它们的文档。

在那里,您只需根据需要将数据写入 NSUserDefaults 并从中读取。

// Store the data
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:fooObject forKey:@"Foo"];
[defaults setObject:barObject forKey:@"Bar"];
[defaults synchronize];

// Load the data
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *fooObject = [defaults objectForKey:@"Foo"];
NSString *barObject = [defaults objectForKey:@"Bar"];
于 2012-05-16T16:42:36.007 回答
1

我假设你知道NSUserDefaults. 对于此特定任务,您只需要保存状态:

  1. 标签栏控制器 - 获取selectedIndex当前标签并将其保存在 userDefaults 中。

  2. 该选项卡的 NavigationController - 如您所知,导航控制器只不过是其中的视图控制器navigationArray。您只需要获取该index视图控制器的 ,并将其存储在userDefaults.

差不多就是这样。您将需要将它们(以及其他用户未保存的数据)保存在UIApplicationWillTerminate应该保存它们的位置。请记住synchronizeuserDefaults 强制保存。:)

于 2012-05-16T16:46:42.023 回答