我可以保存我的应用程序吗';iPhone操作系统关闭时的状态?
我有一个很像电子书的应用程序。我有一堆不同语言的文本信息,可以通过许多深入方法访问。当用户想要进入他们上次阅读的地方时,他们当前必须浏览部分和章节菜单以返回到他们所在的地方。一个理想的解决方案是设置一个书签系统,我正在考虑 但如果我没记错的话,当iPhoneOS4发布时,它们似乎对保存应用程序状态的附加功能做出了重大贡献。这是否意味着使用我的reader应用程序的人可以直接退出,做任何事情,然后当他们回来时,阅读屏幕将与他们离开时一样我可以保存我的应用程序吗';iPhone操作系统关闭时的状态?,iphone,bookmarks,Iphone,Bookmarks,我有一个很像电子书的应用程序。我有一堆不同语言的文本信息,可以通过许多深入方法访问。当用户想要进入他们上次阅读的地方时,他们当前必须浏览部分和章节菜单以返回到他们所在的地方。一个理想的解决方案是设置一个书签系统,我正在考虑 但如果我没记错的话,当iPhoneOS4发布时,它们似乎对保存应用程序状态的附加功能做出了重大贡献。这是否意味着使用我的reader应用程序的人可以直接退出,做任何事情,然后当他们回来时,阅读屏幕将与他们离开时一样 我对如何设置书签系统知之甚少,我想这是值得研究的,但如果iP
我对如何设置书签系统知之甚少,我想这是值得研究的,但如果iPhoneOS4真的能够做到这一点,我可能想暂缓一下。任何想法或见解将不胜感激 这在iPhone操作系统中一直是可能的。大多数人使用
NSUserDefaults
存储应用程序的状态。然后,在应用程序代理的-applicationdFinishLaunching
方法中,或者在设置视图和初始化应用程序状态的任何位置,只需恢复使用NSUserDefaults保存的状态即可。
它们对于“保存状态”的含义是用于后台应用程序。电子书应用程序可能不需要在后台运行,因此您仍然需要像操作系统3那样保存和恢复状态。NSUserDefaults在这方面效果很好。正如其他人所指出的,这不是OS4特有的,在所有应用程序中实现这一点是一个很好的实践
例如,我建议当用户翻阅书籍中的某一页时,使用NSUserDefaults
保存对该页的引用,如下所示:
NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
[userPreferences setObject:currentPageNumber forKey:@"pageNumber"];
当应用程序启动时,您可以读取该值并相应地采取行动
[[NSUserDefaults standardUserDefaults] stringForKey:@"pageNumber"];
您可能只希望在应用程序即将关闭时存储引用,但最好提前存储它(以防应用程序意外退出)
此外,您还提到,用户通过许多“深入方法”进行导航。您可能希望在
NSMutableArray
中保留用户在应用程序中的确切位置记录,并将其保存到NSUserDefaults
中。当应用程序启动时,您将处理此数组中的信息,以使用户返回到停止的位置。如果您使用的是导航控制器,则可以使用以下代码行保存应用程序状态:
NSMutableArray *listOfClasses = [[NSMutableArray alloc] init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:@"ViewControllers"];
NSArray *controllers = [_navController viewControllers];
for(UIViewController *VC in controllers)
[listOfClasses addObject:[NSString stringWithFormat:@"%@",[VC class]]];
[defaults setObject:listOfClasses
forKey:@"ViewControllers"];
[defaults synchronize];
在申请终止时,没有进入后台
您可以使用以下代码行还原您的应用程序:
NSArray *classes = [[NSUserDefaults standardUserDefaults] objectForKey:@"ViewControllers"];
if(classes != nil) {
for(NSString *class in classes) {
if([class isEqualToString:@"FirstViewController"]) {
FirstViewController *viewController = [[FirstViewController alloc] init];
[controllers addObject:viewController];
[viewController release];
} else if([class isEqualToString:@"SecondViewController"]) {
SecondViewController *viewController = [[SecondViewController alloc] init];
[controllers addObject:viewController];
[viewController release];
} else if([class isEqualToString:@"ThirdViewController"]) {
ThirdViewController *viewController = [[ThirdViewController alloc] init];
[controllers addObject:viewController];
[viewController release];
} else {
}
}
}
在应用程序确实完成加载时这里有一个非常值得关注的问题,但因为我们不应该讨论4.0如何在NDA的b/c中工作,你应该在Apple开发者论坛上问这个问题。据我所知,这个问题已经正确回答了三次。请接受其中一个答案或让我们知道原因。谢谢