2010-04-21 77 views
3

我有一個功能很像電子書的應用程序。我有許多不同語言的文本信息,這些信息可以通過多種深入分析方法獲取。當用戶想要進入他們最後閱讀的地方時,他們目前必須瀏覽章節和章節菜單才能回到他們所在的位置。一個理想的解決方案是設置一個書籤系統,我正在考慮。我可以在iPhone OS中保存我的應用程序的狀態嗎?

但是,如果我沒有記錯的話,當iPhone OS 4被宣佈時,他們似乎在保存應用程序狀態方面有很大的作用。這是否意味着有人使用我的閱讀器應用程序將能夠立即退出,做任何事情,然後當他們回來時,就像他們離開閱讀屏幕一樣?

我不太瞭解如何設置書籤系統,我想這將是值得研究的,但我可能會想要拖延iPhone OS 4,如果這確實是它將能夠做的事情。任何想法或見解將不勝感激!

+0

這裏有一個非常有效的關注,但辛格的時間我們不應該談論如何4。0的作品是NDA的B/C,你應該在蘋果開發者論壇上提問。 – bpapa 2010-04-21 15:46:51

+1

就我所知,這個問題已被正確回答了三次。請接受其中一個答案,或讓我們知道爲什麼不。謝謝。 – prendio2 2010-05-11 04:57:01

回答

5

這在iPhone OS中一直是可能的。大多數人使用NSUserDefaults來存儲他們的應用程序的狀態。然後,在您的應用程序代理的-applicationDidFinishLaunching方法中,或者在您設置視圖並初始化應用程序狀態的任何位置,只需恢復使用NSUserDefaults保存的狀態即可。

3

它們對於保存狀態的含義是用於後臺應用程序。電子書應用程序可能不需要在後臺運行,因此您仍然必須像在OS 3中一樣保存和恢復狀態。NSUserDefaults適用於此目的。

5

正如其他人指出的那樣,這不是OS4特有的,這是在所有應用程序中實現這一點的好習慣。

我建議,當用戶打開頁面的一本書,比如你保存到使用NSUserDefaults該頁面的引用如下:

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

應用程序啓動時,你可以看到它的值,並採取相應的行動。

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

你可能只是喜歡存儲參考當應用程序即將關閉,但它是


另外,你提到更好的做法來存儲它早期(當應用程序意外退出)用戶可以瀏覽大量的「向下鑽取」方法。您可能需要在NSMutableArray中記錄用戶在應用中的位置,並將其保存到NSUserDefaults。當您的應用程序啓動時,您將處理此數組中的信息以使用戶回到他們停止的位置。

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 { 

     } 
    } 
} 

在應用做加載完成

相關問題