我需要使用 UIApplicationWillTerminateNotification 和 NSUserDefaults 来存储应用程序的当前状态,其中我需要在用户退出时加载具有先前状态的应用程序应用程序。我的应用程序是一个基于TabBar的应用程序,并且它是一个导航控制器。我需要存储加载在导航控制器中的当前视图控制器和存在导航控制器的当前选项卡。我的应用程序适用于不同的用户,我需要将应用程序的状态特定于用户存储。所以,我也需要存储用户数据。我在StackOverflow中搜索它并用Google搜索它,发现我们需要使用像 NSUserDefaults 这样的东西,并且 UIApplicationWillTerminateNotification 是必需的。这是我第一次遇到这些东西。有人可以发一些关于如何完成我的要求的教程或任何示例代码吗?
答案 0 :(得分: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"];
答案 1 :(得分:1)
我假设你知道NSUserDefaults
的用法。对于此特定任务,您只需要保存状态:
标签栏控制器 - 获取当前标签的selectedIndex
并将其保存在userDefaults中。
该选项卡的NavigationController - 如您所知,导航控制器只是navigationArray
中的视图控制器。您只需获取该视图控制器的index
,并将其存储在userDefaults
。
这就是它。您需要在UIApplicationWillTerminate
中保存它们(以及其他用户未保存的数据)并保存它们。请记住synchronize
userDefaults强制保存。 :)