Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以保存我的应用程序吗';iPhone操作系统关闭时的状态?_Iphone_Bookmarks - Fatal编程技术网

我可以保存我的应用程序吗';iPhone操作系统关闭时的状态?

我可以保存我的应用程序吗';iPhone操作系统关闭时的状态?,iphone,bookmarks,Iphone,Bookmarks,我有一个很像电子书的应用程序。我有一堆不同语言的文本信息,可以通过许多深入方法访问。当用户想要进入他们上次阅读的地方时,他们当前必须浏览部分和章节菜单以返回到他们所在的地方。一个理想的解决方案是设置一个书签系统,我正在考虑 但如果我没记错的话,当iPhoneOS4发布时,它们似乎对保存应用程序状态的附加功能做出了重大贡献。这是否意味着使用我的reader应用程序的人可以直接退出,做任何事情,然后当他们回来时,阅读屏幕将与他们离开时一样 我对如何设置书签系统知之甚少,我想这是值得研究的,但如果iP

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

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


我对如何设置书签系统知之甚少,我想这是值得研究的,但如果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开发者论坛上问这个问题。据我所知,这个问题已经正确回答了三次。请接受其中一个答案或让我们知道原因。谢谢