Iphone 如何在退出时轻松保持应用程序状态
假设我的应用程序状态被提取到一个对象中(以便特定于应用程序实例的所有信息都包含在一个对象中),并且该对象支持nscoding协议。如何在退出/启动应用程序时轻松保存和加载它 我当前的代码如下所示Iphone 如何在退出时轻松保持应用程序状态,iphone,cocoa-touch,ios,Iphone,Cocoa Touch,Ios,假设我的应用程序状态被提取到一个对象中(以便特定于应用程序实例的所有信息都包含在一个对象中),并且该对象支持nscoding协议。如何在退出/启动应用程序时轻松保存和加载它 我当前的代码如下所示 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSUserDefaults *defaults = [NSUs
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
State* state = (State*)[defaults objectForKey:@"State"];
if(state!=nil)
{
viewController.state = state;
}
}
- (void)applicationWillTerminate:(UIApplication *)application {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.viewController.state forKey:@"State"];
}
但在加载时,状态始终为零。。。所以我认为这不是最好的模式:)
事实证明,NSUserDefaults只支持属性列表对象,如NSArray、NSData等。。。没有自定义对象,除非将其包装在nsdata中状态是什么类型的对象 我相信
nsserdefaults
只会保存NSData
,NSString
,NSDictionary
,NSDate
,NSArray
和NSNumber
过去,我将状态保存到字典中,并使用
NSUserDefaults
存储它。您还可以归档您的状态并将其转换为NSData
,然后使用nsserdefaults
保存。有多种方法可以在退出应用程序之前存储应用程序的状态,并在再次启动时恢复应用程序。最好的方法实际上取决于您的应用程序
如果您有一个简单的对象模型,其中只有一个根对象,并且您往往需要将整个对象模型同时存储在内存中,那么您可能会发现NSCoding协议(请参见下面的链接)是保存状态的一种好方法
要持久化的任何对象都应实现此协议的两种方法:
- (void)encodeWithCoder:(NSCoder *)aCoder // to serialise the object
- (id)initWithCoder:(NSCoder *)aCoder // to restore an object
一旦在任何要持久化的对象中实现了这些方法,就可以使用以下内容序列化对象图:
- (void)applicationWillTerminate:(UIApplication *)application {
[NSKeyedArchiver archiveRootObject:yourRootObject toFile:someFilePath];
}
要恢复存档对象时,请执行以下操作:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
id yourRootObject = [NSKeyedUnarchiver unarchiveObjectWithFile:someFilePath];
}
可选地,如果应用程序的对象模型稍微复杂一些,则可以考虑使用核心数据。
最后,虽然用户默认系统可用于存储和检索值,但最好用于简单的应用程序设置(或首选项)。它并不是真正用于保存整个应用程序的状态