3

我有一个功能很像电子书的应用程序。我有一堆不同语言的文本信息,可通过多种深入研究方法访问。当用户想要进入他们上次阅读的位置时,他们当前必须浏览部分和章节菜单才能回到他们所在的位置。一个理想的解决方案是设置一个书签系统,我正在考虑。

但如果我没记错的话,当 iPhone OS 4 发布时,他们似乎对保存应用程序状态的附加功能做了很大的贡献。这是否意味着使用我的阅读器应用程序的人可以直接退出,做任何事情,然后当他们回来时,它会是他们离开时的阅读屏幕?

我不太了解如何设置书签系统,我想这值得研究,但如果 iPhone OS 4 确实能够做到,我可能只想推迟它。任何想法或见解将不胜感激!

4

4 回答 4

5

正如其他人指出的那样,这并不是 OS4 所特有的,在所有应用程序中实现这一点是一种很好的做法。

NSUserDefaults我建议,例如,当用户翻一本书时,您可以使用如下方式保存对该页面的引用:

NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
[userPreferences setObject:currentPageNumber forKey:@"pageNumber"];

当应用程序启动时,您可以读取此值并采取相应措施。

[[NSUserDefaults standardUserDefaults] stringForKey:@"pageNumber"];

您可能只希望在应用程序即将关闭时存储引用,但最好提前存储它(以防应用程序意外退出)


此外,您提到用户浏览了许多“向下钻取方法”。您可能希望记录NSMutableArray用户在应用程序中的确切位置,并将其保存到其中NSUserDefaults。当您的应用程序启动时,您将处理此数组中的信息,以使用户回到他们离开的地方。

于 2010-04-21T15:39:57.953 回答
5

这在 iPhone OS 中一直是可能的。大多数人NSUserDefaults用来存储他们的应用程序的状态。然后在您的应用程序委托的-applicationDidFinishLaunching方法中,或者在您设置视图和初始化应用程序状态的任何地方,只需恢复您使用NSUserDefaults.

于 2010-04-21T15:29:51.353 回答
3

他们对保存状态的含义是用于后台应用程序。电子书应用程序可能不需要在后台运行,因此您仍然需要像在 OS 3 中一样保存和恢复状态。NSUserDefaults 对此非常有效。

于 2010-04-21T15:31:37.517 回答
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 {

        }
    }
 }

在申请时确实完成了加载

于 2012-04-20T10:15:27.243 回答