我的应用程序功能很像电子书。我有一堆各种语言的文本信息,可通过多种深入分析方法访问。当用户想要进入他们最后阅读的位置时,他们当前必须浏览部分和章节菜单以回到原来的位置。一个理想的解决方案是设置书签系统,我正在考虑。
但是,如果我没记错,当iPhone OS 4宣布时,他们似乎在保存应用程序状态方面增加了很多功能。这是否意味着有人使用我的阅读器应用程序可以直接退出,做任何事情,然后当他们重新进入时,它就像他们离开时的阅读屏幕一样?
我不太了解如何设置书签系统,我想它值得研究,但我可能想要推迟iPhone OS 4,如果这确实是它能够做到的。任何想法或见解将不胜感激!
答案 0 :(得分:5)
这在iPhone OS中一直是可行的。大多数人使用NSUserDefaults
来存储其应用程序的状态。然后在您的应用程序委托的-applicationDidFinishLaunching
方法中,或者无论您在何处设置视图并初始化应用程序状态,只需使用NSUserDefaults
恢复您保存的状态。
答案 1 :(得分:5)
正如其他人所指出的那样,这并不是OS4特有的,所以在所有应用程序中实现这一点都是很好的做法。
我建议用户在书中翻页时,例如使用NSUserDefaults
保存对该页面的引用,如下所示:
NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
[userPreferences setObject:currentPageNumber forKey:@"pageNumber"];
当应用程序启动时,您可以阅读此值并采取相应的行动。
[[NSUserDefaults standardUserDefaults] stringForKey:@"pageNumber"];
您可能更愿意在应用程序即将关闭时存储引用,但最好先将其存储(如果应用程序意外退出)
另外,您提到用户可以浏览多种“向下钻取方法”。您可能希望在应用中确切位置的NSMutableArray
内保留记录,并将其保存到NSUserDefaults
。当你的应用程序启动时,你将处理这个数组中的信息,让用户回到他们离开的地方。
答案 2 :(得分:3)
他们对保存状态的意义是背景应用。电子书应用程序可能不需要在后台运行,因此您仍然需要像操作系统3一样保存和恢复状态.NSUserDefaults适用于此。
答案 3 :(得分:3)
如果您使用的是导航控制器,则可以使用以下代码行来保存应用状态:
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 {
}
}
}
在申请时完成加载